我已经连续几天尝试在Amazon Web Services的Elastic Beanstalk下设置Django。我认为我遇到的问题是这个问题:
ERROR - Your WSGIPath refers to a file that does not exist.
我按照教程here进行了一直顺利,直到第6步结束,但是除了步骤5中的通用Elastic Beanstalk页面之外,我不能为我的生活展示任何东西,#2 。我跑的时候
./manage.py runserver
在我的本地计算机上,一切正常,但我无法部署该页面。我首先尝试使用自己编写的小型Django网站。它没有用,所以我删除了我所做的一切并再次尝试,但是没有用,所以我删除了所有这些并再次尝试使用新的django安装。我尝试了很多时间摆弄小东西,但我想我错过了一些重要的东西。
我添加了一个python.config文件,如this tutorial中所述。
这是我的文件结构:
-.git/
-.mysite/
-myapp/
-__init__.py
-models.py
-tests.py
-views.py
-mysite/
-__init__.py
-settings.py
-urls.py
-wsgi.py
-.ebextensions/
-python.config
-manage.py
-mysite.db
-requirements.txt
来自我的settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mysite.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
这是python.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: mysite/wsgi.py
- option_name: DJANGO_SETTINGS_MODULE
value: mysite.settings
- option_name: AWS_SECRET_KEY
value: <This is my secret key>
- option_name: AWS_ACCESS_KEY_ID
value: <This is my access key>
我还需要另一个地方来定义我的WSGIPath吗?有没有办法通过AWS控制台执行此操作?我应该完全跳过EB并直接使用EC2吗?
答案 0 :(得分:14)
来自https://forums.aws.amazon.com/thread.jspa?messageID=396656񠵰
“.ebextensions”目录必须位于应用程序的根级目录中,但是从日志输出中,该目录位于“mysite / .ebextensions”目录中。例如,在运行“git aws.push”之后,在文档中跟随django教程后,您的根目录将如下所示:
.
├── .ebextensions
│ └── python.config
├── .elasticbeanstalk
│ ├── config
├── .git
├── .gitignore
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
而不是:
.
└── mysite
├── .ebextensions
├── .elasticbeanstalk
├── .git
├── .gitignore
├── manage.py
├── mysite
└── requirements.txt
答案 1 :(得分:8)
在应用的根目录中查找.elasticbeanstalk/optionsettings.your-app-name
。搜索WSGIPath
并确保它是您想要的路径。它看起来默认为application.py
。
答案 2 :(得分:3)
我遇到了同样的问题(“你的WSGIPath指的是一个不存在的文件”),最后找到了解决方案:
注意:首先,我正在向错误的方向搜索,因为EB也显示此消息:构建期间发生错误:命令01_migrate失败。。所以我的文件,包括* .config,都被正确找到了。
答案 3 :(得分:2)
好的,这是在尝试了一百万件事之后对我有用的东西。您必须运行eb update
才能更新环境。
因此请确保.elasticbeanstalk/optionsettings.whatever-env
已将WSGIPath设置为您想要的内容,并确保.ebextensions/whatever.config
具有此功能:
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: whatever/wsgi.py
然后运行eb update
,应该工作。请记住,您必须设置别名以确保eb
命令确实有效。例如:
alias eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/eb"
答案 4 :(得分:2)
将AWS的文档跟踪到点后,我遇到了同样的问题。我做了什么来避免它是通过EB CLI逐步初始化应用程序,而不使用AWS文档指示的命令(〜/ ebdjango $ eb init -p python2.7 django-tutorial),并逐步创建环境同样。我在EB CLI中采取的步骤如下:
eb init
eb create
创建环境后,我使用eb config
打开EB的配置文件,以确认我的WSGI路径应该是它的路径:
aws:elasticbeanstalk:container:python:
NumProcesses: '1'
NumThreads: '15'
StaticFiles: /static/=static/
WSGIPath: path/to/wsgi.py
如果进行了任何更改,请确保保存文件并通过在终端中输入eb open
以使用前面步骤中指定的域名打开浏览器窗口来确认一切正常。
答案 5 :(得分:0)
解决方案:使用EBCLI
打开eb config
对我来说,它显示了WSGIPath: application.py
现在将其更改为
WSGIPath: my_app/wsgi.py
保存并部署。