AWS Elastic Beanstalk,构建期间发生错误:命令01_syncdb

时间:2014-03-19 13:00:21

标签: amazon-web-services elastic-beanstalk django-deployment

我需要帮助将部署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/

我非常感谢你的帮助。

5 个答案:

答案 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实例时,也会发生这种情况。