在AWS弹性青苗设置的Django:WSGIPath未找到

问题描述 投票:26回答:6

我一直在尝试了几天,现在设立的Django下的Amazon Web Services'弹性魔豆。我觉得我打的问题是这样的一种:

ERROR - Your WSGIPath refers to a file that does not exist.

我跟着教程here和一切顺利,直到第6步结束,但我不能为我的生命得到任何来自步骤5,#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?

django amazon-web-services wsgi elastic-beanstalk django-wsgi
6个回答
14
投票

https://forums.aws.amazon.com/thread.jspa?messageID=396656&#396656

该“.ebextensions”目录必须是在你的应用程序的根级目录,但是从日志输出,该目录是不是在‘mysite的/ .ebextensions’目录。因此,例如,在文档以下Django的教程后,当你运行“混帐aws.push”你的根目录下是这样的:

.
├── .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

8
投票

在应用程序的根目录中找到.elasticbeanstalk/optionsettings.your-app-name。搜索WSGIPath并确保它是你想要的路径。它看起来像它默认为application.py


3
投票

我有同样的问题(“你WSGIPath指的是不存在的文件”),终于找到了解决办法:

注意:首先,我是在错误的方向搜索,因为EB也显示这样的信息:构建过程中出现错误:命令01_migrate失败。所以我虽然文件,包括*的.config,分别位于正确。


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"

2
投票

我有以下AWS的文档,以点后,同样的问题。我所做的,以避免它被初始化通过EB CLI一步一步的应用程序,而无需使用AWS文档指示命令(〜/ ebdjango $ EB初始化-p python2.7 Django的教程),并创建一个脚印的环境一步为好。我参加了EB CLI的步骤如下:

  1. 初始化应用 eb init 选择默认区域 输入应用程序名称(默认情况下使用按进入) 证实了我使用Python 选择兼容的Python版本与本地环境 设置SSH
  2. 创建环境 eb create 输入环境名称(默认情况下使用按进入) 输入DNS CNAME前缀(使用默认按enter) 选择负载平衡器类型(I选择经典通过输入1)

环境创建后我用eb config打开EB的配置文件,以确认路径到我的WSGI是它应该是什么:

aws:elasticbeanstalk:container:python:
  NumProcesses: '1'
  NumThreads: '15'
  StaticFiles: /static/=static/
  WSGIPath: path/to/wsgi.py

如果有任何更改,请务必保存文件并确认一切由你的终端进入eb open打开使用在前面的步骤中指定的域名浏览器窗口结清了。


0
投票

解决方案:使用EBCLI

开放eb config对我来说,这表明WSGIPath: application.py现在更改为

WSGIPath: my_app/wsgi.py

保存和部署。

© www.soinside.com 2019 - 2024. All rights reserved.