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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top