无法在AWS Elastic Beanstalk上找到Django App的模块

Pau*_*l J 4 python django postgresql amazon-web-services amazon-elastic-beanstalk

我正在尝试在AWS Elastic Beanstalk上运行Django应用程序,但我看起来似乎可能是PYTHONPATH或virtualenv问题,我无法弄明白.

当我尝试在浏览器中加载页面时,我得到了黄色的Django错误屏幕(我仍处于调试模式):

Exception Value: No module named views.rest
Exception Location: /opt/python/current/app/project/urls.py in <module>, line 3
Python Executable:  /opt/python/run/venv/bin/python
Python Version: 2.7.5
Python Path:    
['/opt/python/run/venv/lib/python2.7/site-packages',
 '/opt/python/current/app',
...
Run Code Online (Sandbox Code Playgroud)

我的urls.py导入是:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from myapp.views.rest import *
Run Code Online (Sandbox Code Playgroud)

如果我进入EC2实例,路径看起来正确; /opt/python/current/app包含我的应用程序,包括/opt/python/current/app/myapp/views/rest.py.

我的目录结构包含(当然还有更多):

app/
    .ebextensions/
        packages.config
        python.config
    .elasticbeanstalk/
        config
        optionsettings.myapp-deployment-env
    project/
        settings.py
    application.py
    myapp/
        views/
            rest.py
            views.py
            __init__.py
Run Code Online (Sandbox Code Playgroud)

__init__.py我有:

from myapp.views.views import *
from myapp.views.rest import *
Run Code Online (Sandbox Code Playgroud)

问题不是特定于这些文件 - 如果我添加另一个导入urls.py失败,所以它就像它根本找不到应用程序.

packages.config我有:

packages:
  yum:
    postgresql-devel: []
Run Code Online (Sandbox Code Playgroud)

python.config我有(在试图加载的virtualenv,这可能不是必要的?)

container_commands:
  00_activate:
    command: "source /opt/python/run/venv/bin/activate"
  01_make_admin_executable:
    command: "chmod +x scripts/createadmin.py"
    leader_only: true
  02_make_executable:
    command: "chmod +rx application.py"
    leader_only: true
  03_syncdb:
    command: "python manage.py syncdb --noinput"
    leader_only: true
  04_collectstatic:
    command: "python manage.py collectstatic --noinput"

option_settings:
  - option_name: AWS_SECRET_KEY
    value: mykey
  - option_name: AWS_ACCESS_KEY_ID
    value: myaccesskeyid
  - option_name: application_stage
    value: "staging"
Run Code Online (Sandbox Code Playgroud)

很高兴列出其他配置文件,如果它们有用.它们确实包含设置位置,但没有具体参考PYTHONPATH等.

[aws:elasticbeanstalk:application:environment]
DJANGO_SETTINGS_MODULE=project.settings
Run Code Online (Sandbox Code Playgroud)

我已经运行eb updategit aws.push.

真的很难与这一个!我第一次尝试AWS部署显然错过了一些重要的事情.如果有人知道我错过了什么,真的很感激帮助.

Pau*_*l J 8

结果是mod_wsgi与Django开发服务器问题.格雷厄姆·杜普顿(Graham Dumpleton)的这篇文章非常有助于理解它(它不能被略读).

需要告诉mod_wsgi我的网站的位置.我的WSGI文件(application.py)现在看起来像这样,导入工作:

import os
import sys

sys.path.insert(0, '/opt/python/current/app')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)