Не удается перезапустить тонкий через удаленную машину

Я использую Thin для обслуживания приложения rails, расположенного на тестовой машине. Я хотел бы иметь возможность останавливать/запускать тонкий с моей локальной машины, но следующее не работает:

ssh luc@test_machine '/home/luc/.rvm/gems/ruby-1.9.3-p125/bin/thin -v'

Я получил следующее сообщение об ошибке:

/home/luc/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find thin (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
from /home/luc/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /home/luc/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems.rb:1230:in `gem'
from /home/luc/.rvm/gems/ruby-1.9.3-p125/bin/thin:18:in `<main>'

Почему он перечисляет только 6 драгоценных камней, когда у меня есть баллы?

Когда я подключаюсь по ssh к тестовому серверу:

which thin

дает мне правильный путь:

/home/luc/.rvm/gems/ruby-1.9.3-p125/bin/thin  (question updated with correct path)

ОБНОВЛЕНИЕ

Я создал базовый сценарий test.sh на сервере:

#!/bin/bash
# Update path with ruby / gem
export PATH=$PATH:/home/luc/.rvm/rubies/ruby-1.9.3-p125/bin:/home/luc/.rvm/gems/ruby-1.9.3-p125/bin/
thin -v
exit 0

Я вызываю его с моей локальной машины

ssh luc@test_machine '/home/luc/test.sh'

Но все та же ошибка "не удалось найти тонкий".

ОБНОВЛЕНИЕ 2

Это может быть связано с рубинами/набором драгоценных камней, которые используются, когда скрипт запускается через ssh. я добавил

rvm list
rvm gemset list

в файле test.sh, и у меня есть вывод:

rvm rubies

* ruby-1.9.3-p125 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

gemsets for system (found in /home/luc/.rvm/gems/system)
*

Кажется, что драгоценных камней, которые я установил, там нет ... Однако не знаю, указать версию rubies/gemset для использования через вызов ssh.


person Luc    schedule 25.04.2012    source источник
comment
вы не используете путь, который дает вам which thin. Попробуйте изменить '/home/luc/.rvm/gems/ruby-1.9.3-p125/bin/thin -v' на '/home/gp/.rvm/gems/ruby-1.9.3-p125/bin/thin '   -  person Adrian Serafin    schedule 25.04.2012


Ответы (3)


Вы используете бандлер?

Попробуйте сделать

bundle exec thin -v

Если это не сработает или вы не используете упаковщик, проверьте переменную $PATH, набрав

echo PATH

если драгоценных камней нет в пути, он не сможет его загрузить, держу пари, это что-то с путями :) Обновите их и рок-н-ролл

В худшем случае вам придется создавать обертки rvm gem, для получения дополнительной информации прочитайте это

http://beginrescueend.com/integration/god/

Ваше здоровье!

person Jakub Oboza    schedule 25.04.2012
comment
Спасибо, я обновил вопрос, добавив дополнительную информацию о PATH. Я почти уверен, что это также связано с путем, но пока не могу понять причину этой ошибки. - person Luc; 25.04.2012

Я справился с этим другим способом. Вместо того, чтобы пытаться перезапустить сервер с удаленной машины, я установил гем «rerun» (https://github.com/alexch/rerun), поэтому перезапуск тонкого сервера выполняется автоматически при изменении некоторого кода.

rerun -- thin start

делает трюк действительно хорошо

person Luc    schedule 26.04.2012

это решение сработало для меня (удаленное и капистрано!)

посмотрите на этот ответ!

просто место:

source "/usr/local/rvm/scripts/rvm" # or ~/.rvm/..
rvm use 1.9.3

в /etc/init.d/тонкий

или для капистрано

%w[start stop restart].each do |command|
  desc "#{command} thin server"
  task command, roles: :app do
    run "source '/usr/local/rvm/scripts/rvm' && rvm use 1.9.3 && service thin #{command}"
  end
  after "deploy:#{command}", "thin:#{command}"
end

если вы установили rvm для каждого пользователя, измените исходный путь на «~/.rvm/scripts/rvm»

person twetzel    schedule 27.07.2012