特别打电话给gpg。
我很难跟踪问题,因为日志没有为这些失败的呼叫提供任何输出,并且它们在生产控制台上运行良好。
我已尝试指定gpg的路径:
system "path/to/gpg --all -my --encryption -options
并确保Passenger在我进入控制台的同一用户下运行。我也尝试了反向搜索和%x()命令以寻找更详细的响应。
没有运气。事实证明,祷告,舞蹈和暴力都是无用的。
答案 0 :(得分:1)
为了帮助调试这样的问题,您可以尝试调用bash脚本来处理问题的记录,而不是直接命令:
#!/bin/bash
# my_gpg_script.sh
set -e
set -u
set -x
set -v
path/to/gpg --all -my --encryption -options > /var/log/whats_happening.log
然后从ruby打电话给system "my_gpg_script.sh"
。
答案 1 :(得分:0)
Lebreeze让我走上了正确的道路,但我永远无法让STDOUT重定向到我的日志,最后通过追踪整个方法进行调试https://serverfault.com/questions/98994/suppress-gpg-reading-passphrase-from-file-descriptor-0-message
strace path/to/gpg --all -my --encryption -options 2>>/var/log/whats_happening.log
原来这是一个路径问题。我天真地认为,只要环境和用户相同,$ PATH在控制台和应用程序中都是相同的。不是这样的。在我的httpd.conf文件中添加一些额外的路径可以解决我的问题。
SetEnv PATH /this/bin:/that/other/bin:/and/dont/foget/bin