错误"非绝对主页"通过Net:SSH

Jad*_*don 8 ruby net-ssh ruby-on-rails-3 ubuntu-11.10

有问题的代码

Net::SSH.start('server name', 'user')
Run Code Online (Sandbox Code Playgroud)

这返回"非绝对的家"."用户"实际上确实有一个主目录.一种建议的方法是使用IdentityFile的完整路径修改〜/ .ssh/config.这并没有解决问题.

这个疯狂的部分是,如果通过irb或控制台调用代码可以正常工作.我们尝试从类方法(使用相同的代码)调用它时,它返回"非绝对主页"错误.

'user'也可以通过命令行ssh进入服务器而不会出现问题.服务器正在运行Ubuntu.

UPDATE

感谢@Phrogz - 解决这个问题的方法是将ENV ['HOME']设置为'/ home/deploy'.但是,我还没弄清楚为什么$ HOME被设置为"." 在服务器上.所以,在我或其他人明白这一点之前,我会在没有"答案"的情况下提出这个问题.必须手动设置HOME感觉更像是一个"黑客"而不是一个合适的解决方案,但它确实有效.

小智 0

Linux 根据该/etc/passwd文件设置此信息。

/etc/passwd检查用户存在什么deployer。它应该位于列表底部附近。

这些项目以冒号分隔。的值ENV['HOME']应该是该行中倒数第二个条目。

它是空白的,即有两个冒号在一起吗?

我怀疑您的 HOME 变量不存在于 中,/etc/passwd并且正在默认点文件之一中设置,即类似.bashrc. 然后,.bashrc如果您的应用程序通过不来源您的点文件的 init.d 脚本运行,则会短路。(.bashrc如果通过非交互式 shell 执行命令,许多文件会停止加载命令的其余部分)。

希望这对您有所帮助,并请回复您的发现。