Ich habe eine Rails-Web-Anwendung, mit der Benutzer automatisierte Aufgaben mit mehreren Servern ausführen können. Ich habe eine Rake-Aufgabe verschaltet, die alle 5 Minuten ausgeführt wird (immer wenn es ein Juwel ist) und nach Jobs Ausschau halte, die ausgeführt werden müssen, und die Server mit den entsprechenden Optionen hochfahren.Run Chef's Knife von Rake
Mein Problem ist tatsächlich in der Ausführung von Kochmesser Befehl. Ich mache derzeit:
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
das bringt mich zur Hälfte. Er schaltet auf die entsprechende gemset (Systems) ohne Probleme, aber bei der Ausführung von Messer erhalte ich die folgende:
Could not find multi_json-1.1.0 in any of the sources
Run `bundle install` to install missing gems.
Ich habe nicht Bündler in den Systemedelsteine installiert ... also bin ich ziemlich verwirrt. multi-json-1.1.0 wird von meiner Webanwendung benötigt. Meine Installation von Küchenchef scheint multi_json 1.0.3 zu erfordern, also scheint es eine Vermischung in den Edelsteinanforderungen zu geben.
der Befehl ausgeführt von bash kein Problem ... es nicht nur in Harke am Messerteil
irgendwelche Gedanken?
EDIT: mit mpapis Vorschlag habe ich das RVM Juwel und alles funktioniert gut in IRB. Ich mache die folgenden
RVM.use! 'system'
env = RVM.current
env.shell_wrapper.run_command("cd /my/path/to/opscode/FTW && knife rackspace server list")
aber wenn ich den gleichen Code in Schienen Konsole oder von Rake laufen habe ich Probleme. Die Rails-Konsole ignoriert im Wesentlichen meine RVM.use! und Rake explodiert ... hat es etwas damit zu tun, dass Bundler eingreift?
LÖSUNG: mpapis hat ein phänomenales Juwel https://github.com/mpapis/rvm-with gebaut, mit dem Sie Code innerhalb einer bestimmten Ruby-Version ausführen können.
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
Was soll ich dann verwenden? Ich habe versucht, mit% x {}, system und '' den Befehl auszuführen. System gab den gleichen Fehler, während '' und% x {} äquivalent sind und geben: .RVM/Gems/Ruby-1.9.2-P290 @ Global/Gems/Bundler-1.0.21/Lib/Bundler/Spec_set.rb: 88: in 'materialize ': Konnte multi_json-1.1.0 in keiner der Quellen finden (Bundler :: GemNotFound) –
Ist es nicht möglich, rvm über Rake auszuführen?Das wäre eher bedauerlich –
dort ist Juwel für Rvm-Ruby-Integration => https://github.com/wayneeseguin/rvm-gem wenn es einige Funktionalisten fehlt - Sie könnten Gabel und fügen Sie es - oder öffnen Sie das Problem, so jemand anderes kann schau es dir später an – mpapis