Pregunta

Tengo las tareas rake en mi solicitud rieles. Quiero ejecutar un comando de línea de comandos con el rastrillo en la tarea. Cómo puedo hacer esto. He intentado por el siguiente pero falla

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
Método

El orden de marcha por encima de tiros ejecutar indefinido y comandos del sistema no lanzar ningún error pero no se ejecuta.

¿Fue útil?

Otros consejos

La sh rastrillo incorporada es probablemente el mejor método:

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

La interfaz es similar a Kernel.system pero:

  • aborta si la devolución es! = 0, lo que lo anterior no alcanza nunca echo b
  • el propio comando se repite antes de la salida

run es utilizado por Capistrano y otras cosas para el lanzamiento de comandos, pero Rake menudo hace uso de Kernel#system lugar.

Su comando podría estar siendo ejecutado, pero no funciona. Por qué no hacer un shell script envoltorio se puede probar de forma independiente, o tratar de poner en marcha utilizando la ruta completa:

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

Al parecer extraño tener la secuencia de comandos no en scripts/

La llamada system debe devolver true en caso de éxito. Si este no es el caso, o bien la secuencia de comandos devuelve un código de error, o el comando could't ser ejecutado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top