Come eseguire comandi all'interno di attività Rake?
-
01-10-2019 - |
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.
Soluzione
Questo link può aiutare si esegue il comando della riga di comando in rubino ...
http: // zhangxh. net / programmazione / rubino / 6-ways-to-run-shell-comandi-in-rubino /
Calling comandi di shell da Ruby
http: //blog.jayfields .com / 2006/06 / ruby-kernel-system-exec-e-x.html
%x[command].each do |f|
value = f
end
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 ??li>
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.