У меня есть сервер, на котором установлены наборы ruby и gems, такие как mysql2, capistrano, и я пытаюсь запустить скрипт ruby из удаленный сервер (сервер PHP) с использованием SSH2. Мой скрипт работает нормально на сервере ruby, но когда я пытаюсь сделать то же самое с удаленного сервера, используя ssh2, я не могу запустить этот скрипт ruby.
Для тестирования я написал простые сценарии, которые просто печатают оператор, и он работает, когда мне нужно пройти абсолютный путь, где установлен ruby.
Но сейчас мне очень сложно получить путь для каждого драгоценного камня, установленного для моего скрипта ruby. Ниже ошибка
"/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>';
Если я пытаюсь запустить это без рубинового пути, я получаю
bash ruby command not found
Любые предложения, как я могу просто выполнить свой скрипт ruby с удаленного сервера.
Это звучит как ошибка правильной настройки RVM, а не чего-либо еще.
Проверьте этот ответ: https://superuser.com/questions/413683/how-to-get-ruby-when-called-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
И это должно быть выполнено для пользователя, с которым вы вошли. Вы, вероятно, хотите прочитать и понять этот ответ, чтобы получить то, что вам нужно.
Может быть, намного проще просто установить гемы на рубин по умолчанию…
Других решений пока нет …