我正在尝试运行我作为我的开发机器上的AWS Elastic Beanstalk应用程序的一部分上传的Python脚本,但无法弄清楚如何操作。我相信我located the script correctly,但当我尝试在SSH下运行它时,我收到导入错误。
例如,我将Flask-Migrate迁移脚本作为我的应用程序的一部分(与example in the documentation几乎相同),但在使用
成功SSH连接到我的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上是否有相同的功能?如何运行作为我在AWS SSH会话中上传的应用程序一部分的Python脚本?也许我错过了设置代码运行环境的步骤?
答案 0 :(得分:4)
要迁移数据库,最好使用container_commands
,它们是每次部署应用程序时都会运行的命令。 EBS documentation中有一个很好的例子(步骤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