我需要帮助将部署django Web应用程序部署到AWS EB。我的本地开发环境是mac os maverick。我使用的是django 1.6和virtualenv 1.11.4。如果您能够使用AWS指令进行部署,我真的希望您能够分享您的经验以及您为克服障碍而采取的不同方式。
[django aws](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_django.html)
我陷入第6步:更新应用程序。
我已经尝试了几个配置文件,但这些都没有起作用:
dgeneric.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: django_generic/wsgi.py
- option_name: DJANGO_SETTINGS_MODULE
value: django_generic.settings
- option_name: AWS_SECRET_KEY
value: SAMPLESECRETxMkk7DTME37PgiEnzA8toans
- option_name: AWS_ACCESS_KEY_ID
value: SAMPLEACCESSDAHRD7A
dgeneric.config version2:
container_commands:
collectstatic:
command: "django-admin.py collectstatic --noinput"
01syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
02migrate:
command: "django-admin.py migrate"
leader_only: true
99customize:
command: "scripts/customize.sh"
You can specify any key-value pairs in the aws:elasticbeanstalk:application:environment namespace and it will be
passed in as environment variables on your EC2 instances
option_settings:
"aws:elasticbeanstalk:application:environment":
DJANGO_SETTINGS_MODULE: "django_generic.settings"
"application_stage": "staging"
"aws:elasticbeanstalk:container:python":
WSGIPath: django_generic/wsgi.py
NumProcesses: 3
NumThreads: 20
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "static/"
dgeneric.config version3:
container_commands:
00_make_executable:
command: "chmod +x scripts/createadmin.py"
leader_only: true
01_syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
02_createadmin:
command: "scripts/createadmin.py"
leader_only: true
03_collectstatic:
command: "django-admin.py collectstatic --noinput"
option_settings:
"aws:elasticbeanstalk:container:python:environment":
DJANGO_SETTINGS_MODULE: "django_generic.settings"
"aws:elasticbeanstalk:container:python":
WSGIPath: "django_generic/wsgi.py"
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "static/"
我收到的错误是:
2014-03-19 16:30:09 UTC-0400 INFO Environment update completed successfully.
2014-03-19 16:30:09 UTC-0400 INFO New application version was deployed to running EC2 instances.
2014-03-19 16:30:08 UTC-0400 INFO Command execution completed. Summary: [Successful: 0, Failed: 1].
2014-03-19 16:30:08 UTC-0400 ERROR [Instance: i-3311f412 Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: Error occurred during build: Command 02_createadmin failed .
2014-03-19 16:28:59 UTC-0400 INFO Deploying new version to instance(s).
以下是来自不同尝试的另一段错误,只对配置文件进行了少量更改:
2014-03-19 16:02:57 UTC-0400 INFO Environment update completed successfully.
2014-03-19 16:02:57 UTC-0400 INFO New application version was deployed to running EC2 instances.
2014-03-19 16:02:56 UTC-0400 INFO Command execution completed. Summary: [Successful: 0, Failed: 1].
2014-03-19 16:02:56 UTC-0400 ERROR [Instance: i-3311f412 Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: Error occurred during build: Command 01_syncdb failed .
2014-03-19 16:02:49 UTC-0400 INFO Deploying new version to instance(s).
2014-03-19 16:01:52 UTC-0400 INFO Environment update is starting.
基本上,这些错误来自配置错误配置文件。您能分享一下您的成功故事,或者您在部署中如何通过这一步骤?我认为,遵循亚马逊文档是行不通的。顺便说一句,我也尝试了以下示例,它似乎对我也没有用。 http://grigory.ca/2012/09/getting-started-with-django-on-aws-elastic-beanstalk/
我非常感谢你的帮助。
答案 0 :(得分:2)
而不是使用django-admin.py
我使用manage.py
,因为在django doc中已经重新投放了:
此外,在每个Django中自动创建manage.py 项目。 manage.py是一个围绕django-admin.py的瘦包装 在委托给django-admin.py之前为你照顾两件事:
它将您的项目包放在sys.path上。它设定了 DJANGO_SETTINGS_MODULE环境变量,以便它指向您的 project的settings.py文件。它调用django.setup()来初始化 Django的各种内部。
所以我的工作配置是:
container_commands:
01_syncdb:
command: "python manage.py syncdb --noinput"
leader_only: true
...
ps:不要在配置文件中传递你的aws凭据!改为使用环境变量;)
答案 1 :(得分:2)
我感觉到你的痛苦。
我发现在部署命令行中使用eb logs
给了我必要的堆栈跟踪,以便每次都能解决此问题。搜索返回01_syncdb
的日志,您将找到找到解决方案所需的位。对我来说,这已经发生了很多次,一旦原因让我的local_settings.py
进入git repo。然后我在eb logs
中发现我的应用程序试图连接到127.0.0.1的数据库。我从git中删除了该文件并重新部署了BLAMMO!申请已得到修复。
您可以执行此操作以在本地捕获日志:eb logs > eb_logs.txt
。
不幸的是,eb status
命令的响应非常简短。阅读完整的日志是真正了解那里发生的事情的唯一方法。 BRIGHT SIDE ™是eb logs
,您不需要连接到实例。
答案 2 :(得分:1)
我在通过.config文件设置环境变量时遇到了问题。所以我所做的只是使用最小的option_settings:
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: django_generic/wsgi.py
然后在wsgi.py
中包含以下行os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_generic.settings")
在EB环境(配置 - >软件配置 - >环境属性)的设置中设置所有环境变量(例如AWS访问密钥)。您也可以在此处设置ALLOWED_HOSTS
设置和DB_NAME
等。
有时问题也可能与使用django-admin.py vs manage.py相关,请参阅此问题:Django on AWS Elastic Beanstalk: Unexpected syncdb error on deploy
答案 3 :(得分:1)
如果通过检查配置文件无法解决 01_syncdb失败问题(与教程完全相同),则应检查可能导致此错误的其他文件。
例如,在我的情况下,应用程序第一次成功构建,然后使用" 01_sycndb"失败。在我仔细检查日志文件之后,我发现这个错误是由settings.py中的拼写错误引入的。
检查日志,你可能会找到一些糖果。
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.loggingS3.title.html
答案 4 :(得分:0)
当您部署新应用程序并忘记创建RDS实例时,也会发生这种情况。