以编程方式在Heroku中运行bash脚本文件
我有一个用Go编写并部署在Heroku上的web应用程序。最近,我实现了一个新功能,需要运行bash脚本文件并检索其输出。我使用的命令是:以编程方式在Heroku中运行bash脚本文件,bash,heroku,go,Bash,Heroku,Go,我有一个用Go编写并部署在Heroku上的web应用程序。最近,我实现了一个新功能,需要运行bash脚本文件并检索其输出。我使用的命令是: out, err := exec.Command("bash", script_path, arg).Output() 其中script_path是脚本的绝对路径。(通过使用调用方文件路径动态构建)和arg是脚本的输入 此命令在我的本地计算机中运行良好,但在Heroku中不起作用: 18:51:40 http:panic service 10.238.8.
out, err := exec.Command("bash", script_path, arg).Output()
其中script_path是脚本的绝对路径。(通过使用调用方文件路径动态构建)和arg是脚本的输入
此命令在我的本地计算机中运行良好,但在Heroku中不起作用:
18:51:40 http:panic service 10.238.8.204:17763:exit status 127
ps:如果我在“heroku run bash”上运行相同的命令,它就会工作
有什么想法吗?shell返回代码
127
用于指定“未找到命令”
您可以通过这个小示例看到这种行为
$ nonesuch
-bash: nonesuch: command not found
$ echo $?
127
这类问题通常意味着您需要添加
/full/path/to/myscriptdir
到路径
环境变量,即
export PATH="$PATH:/full/path/to/myscriptdir withSpaces"
有几个地方可以做到这一点,但这取决于你的组织规则
要立即解决此问题,请将其添加到运行Heroku的用户ID的$HOME/.profile
文件中,或者可能会添加一个特定于Heroku的配置文件。(我没有赫罗库的经验)
有趣的是,本文没有提到路径变量
正如您所发现的,您可以编辑代码以直接包含完整路径,即
out, err := exec.Command("/bin/bash", path.Join(".", "src", "ext", "dextenso.sh"),
IHTH您解决了问题吗?是的。它使用的是bash可执行文件的完整路径:out,err:=exec.Command(“/bin/bash”,script\u path,arg).Output(),好的,那么,我应该做点错事了!感谢您的反馈,并确认这是可能的!您的
script\u路径
是否看起来像/app/path/to/script.sh
?这很烦人,但我无法让它工作,而当使用heroku run bash时它可以工作。是的:script\u path:=path.Join(“.”、“src”、“ext”、“dextenso.sh”)。嗨,你的回答帮助我找到了解决方案,但是那些使用path变量的步骤是不必要的。我只需要指定bash可执行文件和脚本的完整路径。如下所示:out,err:=exec.Command(“/bin/bash”,path.Join(“.”,“src”,“ext”,“dextenso.sh”),arg).Output()
。你能编辑你的答案吗?这样我就可以把它标记为解决方案了?谢谢@马塞洛:嗨,好的,我已经做到了。我很高兴这有帮助!