Нож шеф-повара от граблей - PullRequest
0 голосов
/ 27 марта 2012

У меня есть веб-приложение 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    

Ответы [ 3 ]

1 голос
/ 01 мая 2012

РЕШЕНИЕ: 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    
1 голос
/ 27 марта 2012

Ваша проблема в том, что вы запускаете оболочку с помощью команды 'sh', bash унаследует поведение sh, и rvm не будет получен должным образом.

sh никогда не поддерживался RVM, но нам пришлось отключить его явно послепроблемы с запуском X-сервера в Fedora 16.

0 голосов
/ 27 марта 2012

Драгоценный камень multi_json на самом деле требуется туманом, а не поваром. Плагин "стеллаж для ножей" зависит от тумана, который приносит гем multi_json.

Текущая версия тумана (1.3.0) зависит от multi_json ~> 1.0, поэтому он не сможет активировать камень, используя 1.1.0.

Если вы используете Rake для этого, я предлагаю использовать набор гемов для самоцветов стеллажей.

...