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 ответа:
Я исправил это, добавив путь проекта к
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