有问题的代码
Net::SSH.start('server name', 'user')
这将返回“非绝对的家”。 事实上,“用户”确实有一个主目录。 一种建议的方法是修改的〜/ .ssh /全路径的IdentityFile配置。 这并没有解决问题。
这样做的疯狂的是,如果通过IRB或控制台称为代码工作正常。 我们试着从一个类的方法(使用相同的代码)中调用它,它会返回“非绝对的家”的错误的时刻。
“用户”也可以ssh到通过命令行的服务器没有问题。 服务器运行的是Ubuntu Linux系统。
UPDATE
感谢@Phrogz - 这样做的修复程序设置ENV [“HOME”]为“/家庭/部署”。 但是,我还没有想通了,为什么$ HOME被设置成“” 在服务器上。 所以,我将离开这个问题了没有“答案”,直到我,还是别人,数字表示出来。 无需手动设置HOME感觉更像是一个“黑客”不是一个适当的解决方案,但它确实工作。
我们只是碰到了同样的问题,找到了根源。 我们正在运行我们的脚本作为一项服务,如果您检查服务手册页,它运行脚本,包括家庭前条最ENV变量。 我不知道你的情况是一样的,但家中没有设置。
净SSH希望从用户的主文件夹中查找的ssh配置,所以它用来强制ENV [“HOME”]为“” 如果还没有设置。 但是,当File.expand_path试图扩展“的〜/ .ssh”的引发ArgumentError提高。
这两个月前是固定的( https://github.com/net-ssh/net-ssh/pull/98 ),所以更新净-SSH宝石应该解决这个问题。
这肯定通过设置首页的环境变量,如果它没有设置工作。
Linux的设置基于此信息/etc/passwd
的文件。
检查存在什么/etc/passwd
的deployer
用户。 它应该是靠近列表的底部。
该项目冒号分隔。 对于值ENV['HOME']
应该是第二至在该行的最后一个条目。
它是空白的,即有两个冒号在一起?
我怀疑你的HOME变量不出现在/etc/passwd
,并在默认点文件中的一个被设定,即类似.bashrc
。 然后, .bashrc
,如果您的应用程序通过一个脚本init.d中不采购你的点文件运行的短路。 (很多.bashrc
如果是通过非交互的shell执行文件停止加载命令的其余部分)。
希望这有助于和请回来后与您的发现。