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/ を参照するとよいです。