1

我需要帮助部署Django的web应用程序AWS EB。我的本地开发环境是mac os特立独行。我使用的是django 1.6和virtualenv 1.11.4。如果您能够使用AWS指令进行部署,我真的希望您能分享您的经验以及您为克服障碍所做的不同。AWS弹性魔豆,构建过程中出现错误:命令01_syncdb

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

从本质上讲,这些错误来自何方配置文件配置错误。你能分享一下你的成功故事吗,或者你是如何在部署中通过这一步的?正如我所看到的,下面的amazon文档不起作用。顺便说一句,我也尝试了下面的例子,它似乎也不适用于我。 http://grigory.ca/2012/09/getting-started-with-django-on-aws-elastic-beanstalk/

我真的很感谢你的帮助。

回答

2

而不是使用django-admin.py我用manage.py以来,作为repoted在django doc

此外,manage.py会自动在每个Django的 项目创建。 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证书的配置文件!使用,而不是环境变量;)

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

下面一行,设置所有的环境变量(如AWS访问键)在EB环境(配置 - >软件配置 - >环境属性)的设置中。这也是在那里你可以设置ALLOWED_HOSTS设定和DB_NAME

有时候问题,也可以与使用django-admin.py VS manage.py,看到了这个问题:Django on AWS Elastic Beanstalk: Unexpected syncdb error on deploy

2

我感到你的痛苦。

我发现使用部署命令行中的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,您不需要连接到实例。

+0

谢谢,eb日志很有帮助。这应该通过官方的django python在benastalk应用程序中更好地记录。相反,它只是说“查看故障排除” – radtek

+0

使用AWS“查看故障排除”的含义是:将其转到Google,然后阅读StackExchange。 ;) –

+0

有时虽然错误非常糟糕,但eb日志不会返回任何内容,并且从控制台下载日志也不会。服务器也不返回任何答复。当我转换到一个支持geodjango开箱的较旧实例时,我有了这个。发生这种情况时,您必须手动ssh进入EC2实例来检查日志。 – radtek

1

如果你不能解决01_syncdb失败问题通过检查配置文件(与教程完全一样),你应该检查其他文件,可能会导致此错误。

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

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

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

0

在部署新的应用,却忘了创建一个RDS实例这也发生。