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實例這也發生。