references rails generate example create commands ruby-on-rails shell command-line rake rake-task

ruby on rails - rails - ¿Cómo ejecutar comandos dentro de las tareas de Rake?



ruby on rails scaffold (3)

Capistrano usa la run y otras cosas para lanzar comandos, pero Rake a menudo utiliza Kernel#system lugar.

Su comando puede estar siendo ejecutado, pero no funciona. ¿Por qué no hacer un script de shell envoltorio que pueda probar de forma independiente, o intentar y comenzar 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

Parece extraño que su script no esté en scripts/

La llamada al system debería volver true en true de éxito. Si este no es el caso, el script devolvió un código de error o el comando no pudo ejecutarse.

Tengo las tareas de rake en mi aplicación de rieles. Quiero ejecutar un comando de línea de comandos con la tarea de rake. Cómo puedo hacer esto. Lo intenté por lo 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

El comando de ejecución anterior lanza el método de ejecución indefinido y el comando del sistema no genera ningún error, pero no se ejecuta.



El sh Rake incorporado 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:

  • se cancela si la devolución es! = 0, por lo que lo anterior nunca alcanza echo b
  • el comando en sí se hace eco antes de la salida