Как запустить скрипт 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
Другие вопросы по тегам