1

我有一个服务器,上面安装了 ruby​​ 和基本 gems 集,如 mysql2,capistrano,我正在尝试使用 SSH2 从远程服务器(PHP 服务器)触发我的 ruby​​ 脚本。我的脚本在 ruby​​ 服务器上运行正常,但是当我使用 ssh2 从远程服务器尝试相同的操作时,我无法运行该 ruby​​ 脚本。

为了进行测试,我编写了一个简单的脚本,它只打印一个语句,当我必须传递安装 ruby​​ 的绝对路径时,它就可以工作。

但是现在为我的 ruby​​ 脚本安装的每个 gem 获取路径对我来说非常乏味。下面是错误

"/home/user/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- sshkit (LoadError)



"/home/user/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- mysql2 (LoadError)

下面是我试图在我的 php 服务器上执行的脚本

$ssh = new Net_SSH2('ip');
if (!$ssh->login('user', 'password')) {
    exit('Login Failed');
}


echo '<pre>';
print_r($ssh->exec('/home/user/.rvm/rubies/ruby-2.2.0/bin/ruby /home/user/deployment/crm/crm.rb'));
echo '</pre>';

如果我尝试在没有 ruby​​ 路径的情况下运行它,我会得到

bash ruby command not found

任何建议我如何简单地从远程服务器执行我的 ruby​​ 脚本。

4

1 回答 1

0

这听起来像是未能正确设置 RVM 而不是其他任何事情。

检查这个答案:https ://superuser.com/questions/413683/how-to-get-ruby-when-call-from-a-shell-script-to-see-rvm-default-ruby

从那里改编:

# Assumes that 2.2.0 is already fully-installed under RVM.
rvm --default use ruby-2.2.0

这需要为您登录的用户运行。您可能想阅读并理解该答案,以确保您获得所需的内容。

将 gem 安装到默认的 ruby​​ 上可能要简单得多……</p>

于 2015-03-12T08:06:53.587 回答