Question

J'ai les tâches de râteau dans mon application rails. Je veux lancer une commande en ligne de commande avec dans la tâche de râteau. Comment puis-je faire ceci. J'ai essayé par la suite mais ne parvient

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

La commande ci-dessus run plaids méthode run non définie et commande système ne jette pas des erreurs mais pas exécutée.

Était-ce utile?

Autres conseils

sh rake intégré est probablement la meilleure méthode:

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

L'interface est similaire à Kernel.system mais:

  • avorte si le retour est! = 0, donc l'atteint ci-dessus ne echo b
  • la commande elle-même est repris avant que la sortie

run est utilisé par Capistrano et d'autres choses pour lancer des commandes, mais Rake a souvent recours à des Kernel#system à la place.

Votre commande peut être en cours d'exécution, mais ne fonctionne pas. Pourquoi ne pas faire un script shell d'emballage, vous pouvez tester de façon indépendante, ou essayer de coup d'envoi en utilisant le chemin complet:

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

Il semble étrange d'avoir votre script pas dans scripts/

L'appel system devrait revenir true sur le succès. Si ce n'est pas le cas, que ce soit le script a retourné un code d'erreur, ou la commande could't être exécutée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top