ImportError: не удалось импортировать настройки (это на> sys.путь? Есть ли ошибка импорта в файле настроек?) на AWS упругие бобовый стебель


Это, кажется, общая проблема, но все же ни один из ответов на ответы до сих пор не работал для меня.

Джанго: 1.6.2 Python: 2.7.5

Я пытаюсь развернуть приложение Django на AWS Elastic beanstalk. Моя текущая структура проекта Django -

requirements.txt .ebextensions |-myproject.config myproject | |-init.py |-manage.py |-settings |-init.py (all common settings param) |-active.py (to select which of production or development settings to choose) |-production.py |-development.py |-apps |-polls |-init.py |-models.py |-views.py |-urls.py |wsgi.py

Мой файл wsgi.py выглядит следующим образом -

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.active")
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.active'

from os.path import abspath, dirname, join
from site import addsitedir

ROOT = os.path.join(os.path.dirname(__file__), '..')
sys.path.insert(0, ROOT)
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, PROJECT_ROOT)
sys.path.insert(0, abspath(join(PROJECT_ROOT, 'apps'))
sys.path.append('/opt/python/ondeck/app/myproject/')
sys.path.append('/opt/python/ondeck/app/myproject/apps')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

.ebextenstions/myproject.config устанавливается следующим образом`

container_commands:
 01_syncdb:
  command: "django-admin.py syncdb --noinput"
  leader_only: true
 02_collectstatic:
  command: "django-admin.py collectstatic --noinput"
option_settings:
 - namespace:  "aws:elasticbeanstalk:container:python"
   option_name: WSGIPath
   value: "myproject/wsgi.py"
 - option_name: DJANGO_SETTINGS_MODULE
   value: "settings.active"
 - namespace: "aws:elasticbeanstalk:container:python:staticfiles"
   option_name: "/static/"
   value: "static/"

Я также попытался передать параметр --settings=settings.active в django-admin.py, чтобы получить ту же ошибку. The DJANGO_SETTINGS_MODULE переменная окружения задается как settings.module

Эти команды работают с manage.py

Проблема в том, что если из файла .ebextensions/myproject.config я дам container_command django-admin.py syncdb --noinput, то получу следующую ошибку -

2014-03-12 08:16:45,988 [ошибка] команда 01_syncdb (django-admin.py syncdb --noinput) не удалось выполнить команду 2014-03-12 08:16:45,989 [DEBUG] Выход 01_syncdb: обратная трассировка (самый недавний призыв последнего): ImportError: не удалось импортировать настройки параметров.активный" (включен ли он sys.путь? Есть ли здесь ошибка импорта в файле настроек?): Нет модуля именованные настройки.активный

Я получаю ту же ошибку, когда пытаюсь сделать это локально на моей машине разработки тоже. Однако, если на моей машине разработки я установил PYTHONPATH на те же самые, которые я указал в моем файле wsgi.py, т. е.

PYTHONPATH=/path/to/myproject затем команда успешно выполняется локально. Однако, несмотря на то, что я установил тот же путь в файле wsgi.py, он не работает на бобовом стебле.

Так есть ли способ избежать этой ошибки без установки в PYTHONPATH? Если нет, то как я могу настроить его для AWS Elastic Beanstalk?

3 3

3 ответа:

Я исправил это, добавив путь проекта к sys.path на самом wsgi.py. Может быть, вы можете попробовать так.

Попробуйте изменить значение DJANGO_SETTINGS_MODULE в wsgi.py и .ebextenstions/myproject.config на myproject.settings.active.

Хотя я также смог решить проблему импорта настроек с помощью ответа Andres и последующих комментариев Unoti -- >

Чтобы использовать wsgi, созданный django (в моем случае 1.9), добавьте это в файл wsgi:

sys.path.insert(0, os.path.abspath(os.path.dirname(os.path.dirname(__file__))))

Я нашел это интересное чтение, которое все еще кажется актуальным:

Во-вторых, что wsgi.py был автоматически сгенерирован, он дал пользователям впечатление, что оно всегда будет правильным, должно использоваться и не будет нужна модификация. Последствие было что люди перестали видеть то, что один из основными ролями WSGi был файл скрипта для, который должен был установить переменные окружения перед загрузкой приложения Django. ...откуда: https://gist.github.com/GrahamDumpleton/b380652b768e81a7f60c

2. Итак, поскольку мы больше не предполагаем, что местоположение и содержимое файла wsgi установлены в камне для производства, другой вариант-скопировать ваш файл wsgi за пределами проекта и просто изменить настройка адреса пути модуля настроек.

Пс. Я упомяну, хотя это, вероятно, не будет работать для вас, так как у вас нет доступа к конфигурации apache (?), но (для тех, кто это делает) вы можете использовать конфигурацию "python-path" через:

WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com