在AWS Elastic Beanstalk上设置Django:找不到WSGIPath

时间:2012-10-27 16:40:35

标签: django amazon-web-services wsgi elastic-beanstalk django-wsgi

我已经连续几天尝试在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吗?

6 个答案:

答案 0 :(得分:14)

来自https://forums.aws.amazon.com/thread.jspa?messageID=396656&#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中采取的步骤如下:

  1. 初始化应用程序
    1. eb init
    2. 选择默认区域
    3. 输入应用程序名称(按Enter键默认使用)
    4. 确认我使用的是Python
    5. 与我的本地环境兼容的精选Python版本
    6. 设置SSH
  2. 创造环境
    1. eb create
    2. 输入环境名称(按输入默认使用)
    3. 输入DNS CNAME前缀(按输入默认使用)
    4. 选择负载均衡器类型(我选择经典,输入1)
  3. 创建环境后,我使用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

保存并部署。