29

几天来,我一直在尝试在 Amazon Web Services 的 Elastic Beanstalk 下设置 Django。我认为我遇到的问题是这个:

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

我按照这里的教程进行操作,直到第 6 步结束时一切顺利,但除了第 5 步 #2 中的通用 Elastic Beanstalk 页面外,我一生都无法显示任何内容。当我跑

./manage.py runserver

在我的本地机器上,一切正常,但我无法部署该页面。我首先尝试使用我自己编写的一个小型 Django 站点。它没有用,所以我删除了我所做的所有内容并再次尝试,但没有成功,所以我删除了所有内容并再次尝试安装新的 django。我试过很多次摆弄小东西,但我想我错过了一些重要的东西。

我添加了一个 python.config 文件,如本教程中所述。

这是我的文件结构:

-.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吗?

4

6 回答 6

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
于 2013-02-17T21:12:35.423 回答
8

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

于 2013-07-17T23:04:18.660 回答
3

我遇到了同样的问题(“您的 WSGIPath 引用了一个不存在的文件”),终于找到了解决方案:

注意:起初,我搜索的方向错误,因为 EB 也显示此消息:在构建期间发生错误:命令 01_migrate 失败。. 所以我认为包括 *.config 在内的文件位置正确。

于 2015-03-24T15:17:17.330 回答
3

解决方案:使用 EBCLI

打开eb config 对我来说它显示WSGIPath: application.py 现在更改为

WSGIPath: my_app/wsgi.py

保存和部署。

于 2019-02-08T09:51:26.820 回答
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"
于 2014-07-05T04:05:57.323 回答
2

在关注 AWS 的文档之后,我遇到了同样的问题。我为避免它所做的是通过 EB CLI 逐步初始化应用程序,而不使用 AWS 文档指示的命令(~/ebdjango$ eb init -p python2.7 django-tutorial),并逐步创建环境也是。我在 EB CLI 中采取的步骤如下:

  1. 初始化应用程序
    1. eb init
    2. 选择默认区域
    3. 输入应用程序名称(按回车键默认使用)
    4. 确认我正在使用 Python
    5. 选择与我本地环境兼容的 Python 版本
    6. 设置 SSH
  2. 创建环境
    1. eb create
    2. 输入环境名称(按回车键默认使用)
    3. 输入 DNS CNAME 前缀(按回车键默认使用)
    4. 选择负载均衡器类型(我通过输入 1 选择了经典)

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

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

如果进行了任何更改,请确保保存文件并通过eb open在终端中输入以使用前面步骤中指定的域名打开浏览器窗口来确认所有内容均已完成。

于 2017-10-17T18:07:42.837 回答