2011-12-12 13 views
5

私は小さなGoogle App EngineアプリをHerokuプラットフォームに移行しています。私は実際にBigtableを使用していません。webapp2はマイグレーションコストを大幅に削減します。ヘロクのPython webapp2で静的ファイルを処理するにはどうすればよいですか?

今、私は静的ファイルの処理についていません。

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

ありがとうございます。

EDIT

まあ、私は今、私のWSGIサーバ用pasteを使用しています。そしてpaste.StaticURLParser()私は静的ファイルハンドラを実装する必要があります。しかし、私はそれをwebapp2.WSGIApplication()とどのように統合するのか分かりません。誰か助けてくれますか?

おそらくpaste.StaticURLParser()を読み込むにはwebapp2.RequestHandlerクラスをオーバーライドする必要があります。

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() 

助けてください。

答えて

6

以下は、私がこれをどのように機能させるかです。

私は、カスケードアプリケーションに頼っているのが最も効率的な選択肢ではないと思っていますが、私のニーズに十分対応しています。

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() 
+0

返信ありがとう。私はこれを後で試してみよう!私は 'カスケード'について知らなかった。 – Japboy

+0

開発中に静的ファイルを提供するには、DEBUG:などのような変数とnginxのような本番用の変数を使用します。 –

+0

ありがとう!これに対する答えを探していました。 – Amirshk

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

私はゲームに遅れていると考えていますが、実際はDirectoryAppを少し良くしています。それは、AppEngineのようなものをもう少し扱います。私は私のsrcディレクトリに "静的" ディレクトリを作成することができ、その後、私は私のHTML(または何でも)でそれらを参照することができ、このようにします。http:.. localhostを:8080 /静的/の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') 
関連する問題