2012-03-26 6 views
0

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  

Antwort

1

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  
1

Sie Problem ist, dass Sie die Shell über ‚sh‘ Befehl bash startet das sh Verhalten und rvm erben nicht richtig bezogen werden.

sh wurde nie von RVM unterstützt, aber wir hatten es explizit mit Start-X-Server auf Fedora 16

+0

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) –

+0

Ist es nicht möglich, rvm über Rake auszuführen?Das wäre eher bedauerlich –

+0

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

0

Das multi_json Juwel nach Problemen deaktivieren tatsächlich durch Nebel erforderlich ist, nicht Chef. Das Messer-Rackspace-Plugin hängt von Nebel ab, der den multi_json-Edelstein einbringt.

Die aktuelle Version von fog (1.3.0) hängt von multi_json ~> 1.0 ab, daher ist es nicht möglich, den Gem mit 1.1.0 zu aktivieren.

Wenn Sie Rake dafür verwenden, empfehle ich, ein Edelsteinset für die Messer-Rackspace-Edelsteine ​​zu verwenden.

+0

aktualisieren, es scheint nicht ein Problem zu sein, nicht die richtigen Abhängigkeiten zu haben. Ich habe bereits ein Messer, das gut mit den richtigen Edelsteinen funktioniert. Es scheint sich um eine Vermischung von Abhängigkeiten zu handeln. Ich bin versucht zu denken, es ist ein Problem rvm als mpapis wies darauf hin, dass rvm nie unterstützt SH, die das Problem erklären könnte –