首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在部署弹性豆茎之前运行正确的脚本

在部署弹性豆茎之前运行正确的脚本
EN

Stack Overflow用户
提问于 2017-07-01 15:39:54
回答 2查看 2.6K关注 0票数 3

我正在编辑我的.ebextensions .config文件,以便在部署前运行一些初始化命令。我以为这些命令会在包含我的应用程序的提取的.zip的同一个文件夹中运行。但事实并非如此。manage.py位于我的zip根目录中,如果我执行以下命令:

代码语言:javascript
复制
  01_collectstatic:
    command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput"

我得到了一个ERROR: [Instance: i-085e84b9d1df851c9] Command failed on instance. Return code: 2 Output: python: can't open file 'manage.py': [Errno 2] No such file or directory.

我可以执行command: "python /opt/python/current/app/manage.py collectstatic --noinput",但这将运行以前成功部署的manage.py,而不是运行正在部署的manage.py

我尝试通过执行.config来检查command: "pwd"运行的命令的工作目录,看起来pwd是/opt/elasticbeanstalk/eb_infra,它不包含我的应用程序。

因此,我可能需要更改$PYTHONPATH以包含正确的路径,但我不知道是哪一条路径。

在这个评论中,用户在他的.config文件中添加了以下内容:

代码语言:javascript
复制
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: myapp.settings
    PYTHONPATH: "./src"

因为他的manage.py生活在他的zip根目录中的src文件夹中。在我的例子中,我会做PYTHONPATH: ".",但它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-04 11:52:30

AWS支持解决了这个问题。这是他们的答案:

在部署应用程序时,当处理EB扩展和Hook脚本时,它会将应用程序文件保存在“暂存”目录中。一旦预部署脚本完成,应用程序就会被移动到"production“目录中。您所遇到的问题与"manage.py“文件在执行"01_collectstatic”命令时不在预期位置有关。

您的环境(Python3.4,Amazon 2017.03)的暂存位置是"/opt/python/ondeck/app“。

EB扩展“命令”部分在实际创建暂存目录之前执行。要在创建了暂存目录之后运行脚本,您应该使用"container_commands“。本节用于在提取应用程序之后,但在将应用程序部署到生产目录之前修改应用程序。它将自动在暂存目录中运行您的命令。

您能否尝试实现container_command部分,看看它是否有助于解决您的问题?语法将类似于此(但请在部署到生产之前进行测试):

代码语言:javascript
复制
container_commands:
  01_collectstatic:
    command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput"
票数 8
EN

Stack Overflow用户

发布于 2017-07-01 16:47:24

因此,关于豆茎要记住的是,每个命令都是独立的,您可以在它们之间执行而不是维护状态。在本例中,您有两个选项,将命令放入一个shell脚本中,即ebextensions。或者,您可以编写一行命令,执行所有附加于您感兴趣的命令的有状态活动。

例如,

代码语言:javascript
复制
00_collectstatic:
    command: "pushd /path/to/django && source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput && popd"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44862690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档