GAE を Python2.7 にマイグレーションする
GAE デプロイでエラー
久々に、GAE触った。
最新のSDKとPyDevで簡単なアプリケーションをつくって、ローカルPCで動作確認して、デプロイしたら、
A version of this application is using the Python 2.5 runtime, which is deprecated!
こんなエラー。
ログを見ると、webapp2 が見つからないらしい。
: No module named webapp2 Traceback (most recent call last): File "/base/data/home/apps/s~typea-ad/1.368874240100654578/typea_ad.py", line 3, in import webapp2
うーん。Python2.7 でつくっているつもりなのに。。。
と、https://developers.google.com/appengine/docs/python/python25/migrate27 を見ると、どうやら、Python2.7 でアプリを作成するには、いくつか対応しなければいけないらしい。
細かいことは、おいといて、とりあえず動くように
app.yaml の修正
以下の3点を修正
- runtime を python –> python27 に変更
- threadsafe 行を追加
- script: myapp.py – > myapp.app
application: typea-ad version: 1 runtime: python27 api_version: 1 threadsafe: yes handlers: - url: /.* script: myapp.app
アプリケーションの修正
WSGIアプリケーションの作成
上記で、myapp.py –> myapp.app に修正したのは、myapp.py のなかでグローバルスコープに置かれたWSGIアプリケーション app を実行するという記述のため、app という 名前で、webapp2.WSGIApplication を作成する。
def main() の削除
今までのコードを削除
# -*- coding:utf-8 -*- import logging import webapp2 from handler import amazon_handler logger = logging.getLogger('Main') class MainPage(webapp2.RequestHandler): def get(self): self.redirect('/am') app = webapp2.WSGIApplication([ ('/', MainPage), ('/am', amazon_handler.AmazonAd), ], debug=True) """ 以下を削除 def main(): run_wsgi_app(app) if __name__ == '__main__': main() """
と、ここまでやって、再度デプロイしたら、無事動作するようになりました。
webapp2
ちなみに、webapp2 については、http://webapp-improved.appspot.com/ を参照するとよいです。