Django-admin.py и путь python на EC2 Amazon Beanstalk
Я развернул приложение django на Elastic Benastalk, но мои команды не работают, и я думаю, что проблема в том, что django-admin.py не находится в $PYTHONPATH
, я хотел бы добавить мое приложение в путь python, но я не знаю, каков точный путь к экземпляру EC2.
На самом деле я нашел его под: /opt/python/bundle/3/app
(я использовал команду "найти" через SSH)... но это фиксированный и надежный путь?
ps: WTF - это "3"?? (наверняка не версия или количество моих разворачиваний ^ _ ^)
UPDATE:
если я cd до /opt/python/bundle/3/app/myappname
и выполните:
python manage.py shell
Я получаю:
File "manage.py", line 3, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
РЕШИТЬ!
Amazon Beanstalk использует virtualenv (как и я сам локально), чтобы активировать его, вы должны:
source /opt/python/run/venv/bin/activate
cd /opt/python/current/app
python manage.py commandname
НО, чтобы использовать пользовательские команды управления (поэтому мне нужно получить доступ к оболочке django на моем экземпляре EC2), вам нужно добавить приложение в путь python, а также все переменные среды, используемые вашим приложением, поэтому я сделал:
vi /home/ec2-user/.bash_profile
и добавил:
export PYTHONPATH=$PYTHONPATH:/opt/python/current/app
и мои переменные env... теперь это работает!:)
Чтобы автоматически активировать virtualenv и иметь возможность использовать оболочку django, как только регистрируется через ssh, можно добавить:
source /opt/python/run/venv/bin/activate
cd /opt/python/current/app
в .bash_profile:)
Ответы
Ответ 1
Сообщение:
File "manage.py", line 3, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
не потому, что ваше приложение не находится в PYTHONPATH, а потому, что оно вообще не может найти ваше приложение django. Значение вашего каталога сайтов-пакетов не в PYTHONPATH.
Попробуйте найти каталог сайтов-пакетов на вашем сервере, и это должно быть в PYTHONPATH. Я не использовал приложение python с Elastic Beanstalk, но я считаю, что он может использовать виртуальную среду python. В этом случае перед запуском python ./manage shell
вам необходимо настроить свою виртуальную среду,
Ответ 2
Вы можете добавить option_name
, если вам нужно изменить PYTHONPATH или установить любую переменную среды в целом.
В вашем файле .ebextensions/myapp-env.config
(или независимо от вашего имени *.config):
option_settings:
- option_name: PYTHONPATH
value: /opt/python/ondeck/app/myapp:$PYTHONPATH