Domanda

Ho i compiti rake nella mia applicazione rotaie. Voglio correre un comandi riga di comando con il compito di rake. come posso fare questo. ho provato con la seguente, ma non riesce

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
Metodo

Il comando di marcia sopra tiri eseguito undefined & comando di sistema non gettare eventuali errori, ma non eseguito.

È stato utile?

Altri suggerimenti

La sh rake built-in è probabilmente il metodo migliore:

task(:sh) do
  sh('echo', 'a')
  sh('false')
  sh('echo', 'b')
end

L'interfaccia è simile a Kernel.system ma:

  • si interrompe se il ritorno è! = 0, in modo che il sopra non raggiunge mai echo b
  • il comando stesso è ripreso prima che l'uscita

run viene utilizzato da Capistrano e altre cose per il lancio di comandi, ma Rake fa spesso uso di Kernel#system invece.

Il comando potrebbe essere in esecuzione, ma non funziona. Perché non fare uno script di shell wrapper è possibile verificare in modo indipendente, o cercare di dare il via con il percorso completo:

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

Sembrerebbe strano avere lo script non in scripts/

La chiamata system deve restituire true in caso di successo. Se questo non è il caso, sia lo script ha restituito un codice di errore, o il comando could't essere eseguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top