GAE を Python2.7 にマイグレーションする

GAE デプロイでエラー

久々に、GAE触った。

最新のSDKとPyDevで簡単なアプリケーションをつくって、ローカルPCで動作確認して、デプロイしたら、

A version of this application is using the Python 2.5 runtime, which is deprecated!

こんなエラー。

ログを見ると、webapp2 が見つからないらしい。

  1. : No module named webapp2

  2. Traceback (most recent call last):

  3. File "/base/data/home/apps/s~typea-ad/1.368874240100654578/typea_ad.py", line 3, in

  4. import webapp2

うーん。Python2.7 でつくっているつもりなのに。。。

gae_py27_01

と、https://developers.google.com/appengine/docs/python/python25/migrate27  を見ると、どうやら、Python2.7 でアプリを作成するには、いくつか対応しなければいけないらしい。

細かいことは、おいといて、とりあえず動くように

app.yaml の修正

以下の3点を修正

  1. runtime を python –> python27 に変更
  2. threadsafe 行を追加
  3. script: myapp.py – > myapp.app
  1. application: typea-ad
  2. version: 1
  3. runtime: python27
  4. api_version: 1
  5. threadsafe: yes
  6.  
  7. handlers:
  8. - url: /.*
  9. script: myapp.app

アプリケーションの修正

WSGIアプリケーションの作成

上記で、myapp.py –> myapp.app に修正したのは、myapp.py のなかでグローバルスコープに置かれたWSGIアプリケーション app を実行するという記述のため、app という 名前で、webapp2.WSGIApplication を作成する。

def main() の削除

今までのコードを削除

  1. # -*- coding:utf-8 -*-
  2. import logging
  3. import webapp2
  4. from handler import amazon_handler
  5.  
  6. logger = logging.getLogger('Main')
  7.  
  8. class MainPage(webapp2.RequestHandler):
  9. def get(self):
  10. self.redirect('/am')
  11.  
  12. app = webapp2.WSGIApplication([
  13. ('/', MainPage),
  14. ('/am', amazon_handler.AmazonAd),
  15.     ], debug=True)
  16.  
  17. """ 以下を削除
  18. def main():
  19. run_wsgi_app(app)
  20.  
  21. if __name__ == '__main__':
  22. main()
  23. """

と、ここまでやって、再度デプロイしたら、無事動作するようになりました。

webapp2

ちなみに、webapp2  については、http://webapp-improved.appspot.com/ を参照するとよいです。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です