5

現在、小さな Google App Engine アプリを Heroku プラットフォームに移行しています。私は実際には Bigtable を使用していませんがwebapp2、移行コストを大幅に削減しています。

今、私は静的ファイルの処理に行き詰まっています。

良い慣行はありますか?もしそうなら、私をそこに導いてください。

前もって感謝します。

編集

さて、私は今pasteWSGIサーバーに使用しています。そして、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()

どんな助けでも大歓迎です!

4

3 に答える 3

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()
于 2012-01-05T05:07:49.987 に答える
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')
于 2012-07-31T22:14:00.280 に答える
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')
于 2012-01-07T08:04:21.167 に答える