У меня есть веб-приложение rails, которое позволяет пользователям запускать автоматизированные задачи с несколькими серверами.Я подключил задачу rake к запуску каждые 5 минут (всякий раз, когда gem) и проверял задания, которые нужно выполнить, и раскручивал серверы с соответствующими параметрами.
Моя проблема в том, что я фактически выполняю команду ножа шеф-повара.В настоящее время я делаю:
sh %{bash -c -l 'cd ~/opscode/FTW && source ~/.rvm/scripts/rvm && rvm use system && knife rackspace server list'} do |ok, res|
if ! ok
puts "meh? (status = #{res.exitstatus})"
puts res
end
end
, это делает меня на полпути.Он переключается на соответствующий набор гемов (системы) без каких-либо проблем, но при выполнении ножа я получаю следующее:
Could not find multi_json-1.1.0 in any of the sources
Run `bundle install` to install missing gems.
У меня не установлен упаковщик в системных гемах ... так что я довольносмущенный.multi-json-1.1.0 требуется для моего веб-приложения.Моя установка chef, похоже, требует multi_json 1.0.3, поэтому, похоже, что в требованиях к гемам есть путаница.
команда запускается из bash без проблем ... она терпит неудачу только в рейке на части ножа
есть мысли?
РЕДАКТИРОВАТЬ: используя предложение mpapis, я использовал гем RVM, и все отлично работает в IRB.Я делаю следующее
RVM.use! 'system'
env = RVM.current
env.shell_wrapper.run_command("cd /my/path/to/opscode/FTW && knife rackspace server list")
, однако, когда я запускаю тот же код в консоли rails или из rake, у меня возникают проблемы.Консоль Rails практически игнорирует мой RVM.use!и рэйк взрывается ... это как-то связано с вмешательством компоновщика?
РЕШЕНИЕ: mpapis создал феноменальный гем https://github.com/mpapis/rvm-with, который позволяет вам выполнять код в определенной версии ruby.
RVM.with '1.8.7' do |r|
puts r.execute "unset RUBYOPT"
puts r.execute "cd /home/hunter/opscode/FTW && knife rackspace server list"
#puts r.execute "ruby --version"
end