Как запустить скрипт Python, который является частью приложения, загруженного в сеанс AWS SSH?
Я пытаюсь запустить скрипт Python, который я загрузил как часть моего приложения AWS Elastic Beanstalk со своего компьютера для разработки, но не могу понять, как это сделать. Я считаю, что правильно разместил скрипт, но когда я пытаюсь запустить его под SSH, я получаю ошибку импорта.
Например, у меня есть сценарий миграции Flask-Migrate как часть моего приложения (почти так же, как в документации), но после успешного SSHing к моему экземпляру EB с
> eb ssh
и найти сценарий с
$ sudo find / -name migrate.py
когда я бегу в каталоге (/opt/python/current
) где я его нашел
$ python migrate.py db upgrade
по приглашению SSH я получаю
Traceback (most recent call last):
File "db_migrate.py", line 15, in <module>
from flask.ext.script import Manager
ImportError: No module named flask.ext.script
хотя мой requirements.txt
(присутствует вместе с остальными моими файлами в том же каталоге) flask-script==2.0.5
,
На Heroku я могу сделать все это в два этапа с
> heroku run bash
$ python migrate.py db upgrade
Есть ли в AWS эквивалентная функциональность? Как запустить скрипт Python, который является частью приложения, загруженного в сеанс AWS SSH? Возможно, мне не хватает шага для настройки среды, в которой выполняется код?
1 ответ
Для переноса базы данных лучше всего использовать container_commands
это команды, которые будут запускаться каждый раз при развертывании приложения. В документации EBS есть хороший пример (Шаг 6):
container_commands:
01_syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
Причина, по которой вы получаете ImportError
потому что EBS устанавливает ваши пакеты в virtualenv. Прежде чем запускать произвольные скрипты в вашем приложении в SSH, сначала перейдите в каталог, содержащий ваш (последний) код с
cd /opt/python/current
а затем активировать virtualenv
source /opt/python/run/venv/bin/activate
и установите переменные окружения (что, вероятно, ожидает ваш скрипт)
source /opt/python/current/env