【问题标题】:AWS Elastic Beanstalk, Error occurred during build: Command 01_syncdbAWS Elastic Beanstalk,构建期间发生错误:命令 01_syncdb
【发布时间】:2014-04-25 17:52:39
【问题描述】:

我需要帮助将 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 版本2:

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 版本 3:

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).

这里是另一个错误的 sn-p,来自不同的尝试,只对配置文件进行了微小的更改:

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/

非常感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    我没有使用django-admin.py,而是使用manage.py,因为正如django doc中所报告的那样:

    另外,每一个Django都会自动创建manage.py 项目。 manage.py 是 django-admin.py 的一个瘦包装器,它需要 在委托给 django-admin.py 之前为您处理两件事:

    它将您项目的包放在 sys.path 上。它设置 DJANGO_SETTINGS_MODULE 环境变量,使其指向您的 项目的 settings.py 文件。它调用 django.setup() 来初始化 Django 的各种内部结构。

    所以我的工作配置是:

    container_commands:
      01_syncdb:
        command: "python manage.py syncdb --noinput"
        leader_only: true
    ...
    

    ps:不要在配置文件中传递您的 aws 凭据!改用环境变量;)

    【讨论】:

      【解决方案2】:

      当您部署新应用并忘记创建 RDS 实例时也会发生这种情况。

      【讨论】:

        【解决方案3】:

        如果你不能通过检查配置文件解决01_syncdb failed问题(和教程完全一样),你应该检查其他可能导致这个错误的文件。

        例如,在我的例子中,应用程序第一次构建成功,然后失败并显示“01_sycndb”。在我仔细检查了日志文件之后,我发现这个错误是由settings.py中的一个错字引入的。

        查看日志,你可能会发现一些糖果。

        http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.loggingS3.title.html

        【讨论】:

          【解决方案4】:

          我感觉到你的痛苦。

          我发现在部署命令行中使用eb logs 每次都可以返回必要的堆栈跟踪来解决此问题。在返回的日志中搜索01_syncdb,您将找到找到解决方案所需的位。对我来说,它已经发生了很多次,一旦原因是让我的local_settings.py 进入 git 存储库。然后我在eb logs 中发现我的应用程序正在尝试连接到位于 127.0.0.1 的数据库。我从 git 中删除了该文件并重新部署和 BLAMMO!应用程序已修复。

          您可以这样做以在本地捕获日志:eb logs > eb_logs.txt

          不幸的是,eb status 命令的响应非常简短。阅读完整日志是真正了解其中发生了什么的唯一方法。 BRIGHT SIDE™ 是使用eb logs,您无需连接到实例。

          【讨论】:

          • 谢谢,eb 日志很有帮助。这应该通过 benastalk 应用程序中的官方 django python 更好地记录。相反,它只是说“查看故障排除”
          • 使用 AWS “查看故障排除”意味着:去谷歌搜索,然后阅读 StackExchange。 ;)
          • 有时虽然错误非常严重,以至于 eb 日志什么也不返回,控制台的下载日志也没有返回。服务器也没有回复。当我切换到支持 geodjango 开箱即用的旧实例时,我遇到了这个问题。发生这种情况时,您必须手动 ssh 进入 EC2 实例以检查日志。
          • 是的,我之前在部署中肯定遇到过这样的麻烦。出于这个原因,很适合使用附加到任何 EC2 实例的密钥进行部署。
          • 我将很快发布一个指南,将所有内容分解。不知道为什么我不能使用新实例通过 yum 安装 gdal。 geodjango 应用程序的巨大痛苦
          【解决方案5】:

          我在通过 .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 与 manage.py 有关,请参阅此问题:Django on AWS Elastic Beanstalk: Unexpected syncdb error on deploy

          【讨论】:

            猜你喜欢
            • 2017-05-30
            • 2020-09-15
            • 2019-04-03
            • 2018-05-25
            • 2015-09-15
            • 2015-06-13
            • 2020-12-13
            • 2020-02-19
            • 2017-01-22
            相关资源
            最近更新 更多