1

我需要帮助将 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).

这是另一个尝试的错误片段,只对配置文件进行了微小的更改:

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/

我真的很感谢你的帮助。

4

5 回答 5

2

如django doc中所报告的,而不是使用django-admin.py我使用manage.py以来:

此外,在每个 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 凭据!改用环境变量;)

于 2014-03-21T15:41:22.503 回答
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无需连接到实例。

于 2014-06-18T15:13:20.767 回答
1

如果通过检查配置文件不能解决01_syncdb failed问题(与教程完全相同),则应检查可能导致此错误的其他文件。

例如,在我的情况下,应用程序第一次构建成功,然后失败并显示“01_sycndb”。仔细检查日志文件后,我发现此错误是由 settings.py 中的拼写错误引起的。

检查日志,您可能会发现一些糖果。

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

于 2014-07-25T01:28:47.177 回答
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 与 manage.py 有关,请参阅此问题:AWS Elastic Beanstalk 上的 Django: Unexpected syncdb error on deploy

于 2014-03-20T17:35:51.010 回答
0

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

于 2015-03-30T16:48:00.000 回答