Wie Befehle innerhalb Rake Aufgaben auszuführen?
-
01-10-2019 - |
Frage
Ich habe die Rake-Aufgaben in meiner Rails-Anwendung. Ich möchte ein Kommandozeilen-Befehle mit Rake Aufgabe ausgeführt werden soll. Wie kann ich das machen. Ich habe versucht, durch die folgende, aber nicht
desc "Sending the newsletter to all the users"
task :sending_mail do
run "cd #{RAILS_ROOT} && ar_sendmail -o -t NewsLetters -v"
system "cd #{RAILS_ROOT} && ar_sendmail -o -t NewsLetters -v &"
end
Der oben gezeigten Fahrbefehl Würfe ausführen Methode nicht definiert und System-Befehl keine Fehler zu werfen, aber nicht ausgeführt.
Lösung
Diese Links können Sie Befehlszeilenbefehl in ruby ??...
Hilfehttp: // zhangxh. net / Programmierung / ruby ??/ 6-Wege-to-Run-Shell-Befehle-in-ruby /
aufrufen Shell-Befehle von Ruby
http: //blog.jayfields .com / 2006/06 / ruby-Kernel-System-exec-and-x.html
%x[command].each do |f|
value = f
end
Andere Tipps
Die sh
Rake built-in ist wahrscheinlich die beste Methode:
task(:sh) do
sh('echo', 'a')
sh('false')
sh('echo', 'b')
end
Die Schnittstelle ist ähnlich Kernel.system
aber:
- bricht es, wenn die Rückkehr ist! = 0, so dass die oben nie
echo b
erreicht - der Befehl selbst wird vor dem Ausgang Echo
run
durch Capistrano und andere Dinge für den Start-Befehle verwendet, aber Rake oft nutzt Kernel#system
statt.
könnte Ihr Befehl ausgeführt werden wird, aber nicht funktioniert. Warum nicht einen Wrapper-Shell-Skript machen Sie unabhängig testen können, oder versuchen, mit dem vollständigen Pfad beginnen:
newsletter_script = File.expand_path('ar_sendmail', RAILS_ROOT)
if (File.exist?(newsletter_script))
unless (system(newsletter_script + ' -o -t NewsLetters -v &'))
STDERR.puts("Script #{newsletter_script} returned error condition")
end
else
STDERR.puts("Could not find newsletter sending script #{newsletter_script}")
end
Es würde seltsam erscheinen, das Skript zu haben, nicht in scripts/
Der system
Aufruf sollte true
auf Erfolg zurück. Ist dies nicht der Fall ist, entweder das Skript einen Fehlercode zurückgegeben, oder der Befehl could't ausgeführt werden.