我现在将我的小型Google App Engine应用程序迁移到Heroku平台。我实际上并没有使用Bigtable,webapp2
大大降低了我的迁移成本。
现在我一直在处理静态文件。
有没有好的做法?如果是的话,请带我去那里。
提前致谢。
修改
好吧,我现在正在使用paste
作为我的WSGI服务器。 paste.StaticURLParser()
应该是我实现静态文件处理程序所需要的。但是我不知道如何将它与webapp2.WSGIApplication()
集成。有谁可以帮助我?
也许我需要覆盖webapp2.RequestHandler
类来正确加载paste.StaticURLParser()
;
import os
import webapp2
from paste import httpserver
class StaticFileHandler(webapp2.RequestHandler):
u"""Static file handler"""
def __init__(self):
# I guess I need to override something here to load
# `paste.StaticURLParser()` properly.
pass
app = webapp2.WSGIApplication([(r'/static', StaticFileHandler)], debug=True)
def main():
port = int(os.environ.get('PORT', 5000))
httpserver.serve(app, host='0.0.0.0', port=port)
if __name__ == '__main__':
main()
任何帮助都将不胜感激!
答案 0 :(得分:7)
以下是我如何使用它。
我猜测依靠级联应用不是最有效的选择,但它足以满足我的需求。
from paste.urlparser import StaticURLParser
from paste.cascade import Cascade
from paste import httpserver
import webapp2
import socket
class HelloWorld(webapp2.RequestHandler):
def get(self):
self.response.write('Hello cruel world.')
# Create the main app
web_app = webapp2.WSGIApplication([
('/', HelloWorld),
])
# Create an app to serve static files
# Choose a directory separate from your source (e.g., "static/") so it isn't dl'able
static_app = StaticURLParser("static/")
# Create a cascade that looks for static files first, then tries the webapp
app = Cascade([static_app, web_app])
def main():
httpserver.serve(app, host=socket.gethostname(), port='8080')
if __name__ == '__main__':
main()
答案 1 :(得分:2)
这使您的代码更易于部署,因为您可以使用nginx为生产中的静态媒体提供服务。
def main():
application = webapp2.WSGIApplication(routes, config=_config, debug=DEBUG)
if DEBUG:
# serve static files on development
static_media_server = StaticURLParser(MEDIA_ROOT)
app = Cascade([static_media_server, application])
httpserver.serve(app, host='127.0.0.1', port='8000')
else:
httpserver.serve(application, host='127.0.0.1', port='8000')
答案 2 :(得分:2)
在游戏后期考虑我,但我实际上更喜欢DirectoryApp。它处理的东西更像AppEngine。我可以在我的src目录中创建一个“静态”目录,然后我可以在我的HTML(或其他)中引用这些目录:http:.. localhost:8080 / static / js / jquery.js
static_app = DirectoryApp("static")
# Create a cascade that looks for static files first, then tries the webapp
app = Cascade([static_app,wsgi_app])
httpserver.serve(app, host='0.0.0.0',
port='8080')