我正在尝试将django应用程序部署到弹性beanstalk。我正在使用amazon的预配置Python 3.4 docker容器和新的Awsebcli v3命令行工具进行部署。当我运行eb deploy
时,我收到了ERROR: Timed out while waiting for command to Complete
消息,但在运行eb logs
时,我看不到任何错误迹象。当我导航到为环境提供的CNAME时,它只是说Internal Server Error
在Amazon使用docker预配置的python容器部署到EB的示例中,他们使用了一个烧瓶应用程序并使用名为application.py
的文件运行应用程序...我没有这样的application.py文件,我认为可能导致问题。我将在application.py文件中放置什么来运行我的django应用程序,以及应用程序所需的任何命令(如果数据库需要同步,则为collectstatic,syncdb,否则makemigrations和migrate等)
我正在使用Django 1.7和Python 3.4
谢谢
答案 0 :(得分:2)
您的容器是否已成功在本地运行?如果没有,我会在您尝试部署到Elastic Beanstalk之前执行此操作。我也处于这个过程的中间,并没有发现它特别容易!但是,我已经解决了你提到的问题。
我的application.py文件如下所示:
import os
import sys
sys.path.insert(0, '/var/app')
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
然后我有:
/var/app
|
| project/
settings.py
| myapp/
views/
templates/
...
这使我得到一个正在运行的应用程序,但不提供我的静态文件,除非我在开发模式下运行。我认为这意味着容器的Apache(或者它是Nginx)实例没有提供我的/ var / app / static目录,但我还没想到它。
至于collectstatic
和syncdb
- 到目前为止,我只是手动运行它们。我以为它们可以作为CMD条目添加到Dockerfile中,但是Docker will only execute the last of those entries,所以它不起作用。
我遇到的另一个问题是,是否可以在Beanstalk上运行两个容器(我将Postgres放在一个容器中,将Django放在另一个容器中)。我不确定eb deploy
能否应对此问题。