在Heroku的发布阶段执行shell脚本

Nic*_*joh 4 shell heroku

我有两个命令要在发布阶段执行,根据本教程(https://devcenter.heroku.com/articles/release-phase),我将它们包含在名为release.sh的shell脚本中(位于根目录中)我的Django项目).

#!/bin/bash

python manage.py migrate
python manage.py compress
Run Code Online (Sandbox Code Playgroud)

在我的Procfile中,我添加了脚本,如文章中所述.

release: ./release.sh
web: gunicorn myapp.wsgi --log-file -
Run Code Online (Sandbox Code Playgroud)

但在发布期间我收到以下错误.

/bin/sh: 1: ./release.sh: not found
Run Code Online (Sandbox Code Playgroud)

然后发布失败.

我不知道问题是在Procfile中的路径(我也尝试过bash $PWD/releash.sh)或者在调用它时文件不可用.任何帮助,将不胜感激.

编辑:

我的release.sh是在一个子文件夹中,这就是为什么没找到它,但现在我得到了许可被拒绝.

/bin/sh: 1: ./release.sh: Permission denied
Run Code Online (Sandbox Code Playgroud)

Nic*_*joh 9

这很有效

chmod u+x release.sh && ./release.sh
Run Code Online (Sandbox Code Playgroud)

所以Procfile成了

release: chmod u+x release.sh && ./release.sh
web: gunicorn myapp.wsgi --log-file -
Run Code Online (Sandbox Code Playgroud)


小智 8

为此,release.sh必须是可执行的

在本地,您可以运行chmod a+x release.sh. 但是您不想在 heroku 上这样做,因此您可以更改配置文件以具有以下内容:

release: bash release.sh
web: gunicorn myapp.wsgi --log-file -
Run Code Online (Sandbox Code Playgroud)

  • @NicholasKajoh `bash release.sh` 不关心 `release.sh` 是否可执行 (4认同)