AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(4) いくつかのトラブルシュート
- (1) Django起動まで
- (2) (TIPS) SSH、RDSへの接続
- (3) (TIPS) ログの確認とデプロイ結果の確認
- (4) いくつかのトラブルシュート
- (5) アプリケーションの作成
- (6) createadmin スクリプトの実行のトラブルシュート
- (7) 静的IPアドレスの設定とドメインの取得とDNSの設定
- AWS Elastic Beanstalk RDS の文字コードをutf-8に設定しなおす
- Djangoでバッチ処理を行う(AWS Elasticbeanstalk)
AWS Elastic Beanstalk Django アプリケーション環境を CentOS6.5 上に PyDevを使って構築する(1) Django起動まで
で開発環境を構築した。
いくつかのトラブルシュートを以下に備忘。
1.SignatureDoesNotMatch エラー
1.1 現象
eb start したときなど、に以下のようなエラーが発生する。
SignatureDoesNotMatch. Signature expired: 20150102T071152Z is now earlier than 20150102T133521Z (20150102T134021Z - 5 min.)
1.2 原因と対応
クライアントPCの時間が閾値をこえてずれている。
時間をあわせることで解決。
または、タイムサービスを構成する。NTPがインストールされているか確認。されていなければ、
yum insetall ntp
[root@localhost ~]# rpm -qa ntp ntp-4.2.6p5-1.el6.centos.i686
インストールされている。
サービスを起動
[root@localhost ~]# service ntpd start ntpd を起動中:
Level3および5で自動実行されるように構成
[root@localhost ~]# chkconfig --level 3 --level 5 ntpd on [root@localhost ~]# chkconfig --list ntpd ntpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
2.Target WSGI script not found or unable to stat エラーとなる
http://stackoverflow.com/questions/20910461/django-elastic-beanstalk-deploy-showing-404
http://stackoverflow.com/questions/17713871/target-wsgi-script-not-found-or-unable-
2.1 現象
アプリケーションにアクセスするとNot Found エラーとなり、
エラーログには、Target WSGI script not found or unable to stat が記録される。
------------------------------------- /var/log/httpd/error_log ------------------------------------- [Sat Jan 03 01:31:28.312782 2015] [:error] [pid 2297] [client 127.0.0.1:35123] Target WSGI script not found or unable to stat: /opt/python/current/app/application.py [Sat Jan 03 01:31:57.774374 2015] [:error] [pid 2300] [client 172.31.8.41:64447] Target WSGI script not found or unable to stat: /opt/python/current/app/application.py
2.2 原因と対応
これが結構やっかい。。。
原因として、デフォルトの設定値 WSGI Path の設定値は、/application.py のようなのだ。
チュートリアルの手順通り実施した場合、Elastic Beanstalk のアプリケーション設定からSoftware Configuration を確認すると、WSGIPath : application.py) となっている。
しかしながら、実際のアプリケーションの構成は、/myapplication/wsgi.py となっている。
[root@localhost phrase]# tree . ├── manage.py ├── phrase │ ├── __init__.py │ ├── __init__.pyc │ ├── settings.py │ ├── settings.pyc │ ├── urls.py │ ├── urls.pyc │ ├── wsgi.py │ └── wsgi.pyc └── requirements.txt
しかし、チュートリアルで.ebextensiions/xxxx.configファイルに記述するのは、、/myapplication/wsgi.py
[root@localhost phrase]# cat .ebextensions/phrase.config container_commands: 01_syncdb: command: "django-admin.py syncdb --noinput" leader_only: true option_settings: - namespace: aws:elasticbeanstalk:container:python option_name: WSGIPath value: phrase/wsgi.py - option_name: DJANGO_SETTINGS_MODULE value: phrase.settings
さらに、.elasticbeanstalk 以下に自動作成される設定値もある。
[root@localhost phrase]# cat .elasticbeanstalk/optionsettings.phrase-env :(略) [aws:elasticbeanstalk:container:python] NumProcesses=1 NumThreads=15 StaticFiles=/static/=static/ WSGIPath=phrase/wsgi.py
チュートリアルとは異なる手順で設定を行ったので、このファイルでは、WSGIPath=phrase/wsgi.py となっているが、チュートリアルと同様の手順で実施すると、ここは WSGIPath=application.py となっていた。
ということで、実際は解決策を実施したわけではないが、おそらく上記の2ファイル( .ebextensions/xxxx.config,.elasticbeanstalk/optionsettings.phrase-env ) の WSGIPathの設定を修正した上で、git commit -a を実施(.ebextensions/xxxx.config は git リポジトリの対象)した上で、環境の更新とGitリポジトリからデプロイを実施すれば解決するのではないかと推測できる。
(virtualenv)[piroto@localhost phrase]$ eb update (virtualenv)[piroto@localhost phrase]$ git aws.push