system()从脚本/控制台调用成功,但在应用程序中无声地失败

时间:2011-03-28 06:08:38

标签: ruby-on-rails debugging command-line gnupg

特别打电话给gpg。

我很难跟踪问题,因为日志没有为这些失败的呼叫提供任何输出,并且它们在生产控制台上运行良好。

我已尝试指定gpg的路径:

  system "path/to/gpg --all -my --encryption -options

并确保Passenger在我进入控制台的同一用户下运行。我也尝试了反向搜索和%x()命令以寻找更详细的响应。

没有运气。事实证明,祷告,舞蹈和暴力都是无用的。

2 个答案:

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