如何运行作为我在AWS SSH会话中上传的应用程序一部分的Python脚本?

时间:2015-01-16 13:35:24

标签: python amazon-web-services ssh elastic-beanstalk

我正在尝试运行我作为我的开发机器上的AWS Elastic Beanstalk应用程序的一部分上传的Python脚本,但无法弄清楚如何操作。我相信我located the script correctly,但当我尝试在SSH下运行它时,我收到导入错误。

例如,我将Flask-Migrate迁移脚本作为我的应用程序的一部分(与example in the documentation几乎相同),但在使用

成功SSH连接到我的EB实例之后
> eb ssh

locating the script

$ 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脚本?也许我错过了设置代码运行环境的步骤?

1 个答案:

答案 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