Llame a un script Ruby desde un controlador de aplicación Rails

Soy muy nuevo en Rails y tengo un script que ejecuto desde la consola como este

   $ ruby axml2xml.rb ExamPaper.apk

Ahora, ¿cómo llamo a este script desde el método de mi controlador y paso el mismo parámetro que ExamPaper.apk?

Lo intenté require 'axml2xml.rb' pero obtuve un error al apuntar a esta línea de código Zip::ZipFile.foreach(ARGV[0]) do |f|. Básicamente, ¿cómo hago algo como axml2xml.rb 'ExamPaper.apk' en mi controlador?

preguntado el 04 de julio de 12 a las 09:07

4 Respuestas

Tienes al menos 3 opciones:

  • exec(command)
  • %x{ command }
  • system(command)

Tienen diferentes comportamientos, así que asegúrese de leer este consejo rápido y/o la respuesta de esta pregunta para obtener más información sobre estos comandos.

En tu caso, los backticks o %x El comando es probablemente la mejor opción.

value = `ruby axml2xml.rb ExamPaper.apk`

contestado el 23 de mayo de 17 a las 13:05

Puedes intentar usar system or popen, pero solo para tareas cortas, para obtener más información al respecto, consulte aquí.

Si su tarea requiere más tiempo, definitivamente debería echar un vistazo a algo como trabajo_retrasado y use un trabajo en segundo plano o algún tipo de cola para ejecutar su trabajo. De esta manera, su servidor no se bloquea y sus usuarios no tienen que esperar hasta que se complete su trabajo.

Respondido 04 Jul 12, 09:07

Si desea ejecutarlo como un comando de shell, use:

exec 'ruby axml2xml.rb ExamPaper.apk'

Respondido 04 Jul 12, 09:07

En ruby ​​hay varias formas de ejecutar comandos de shell.

system("ls")
%x("ls")
`ls`   #nice they are back ticks
exec "ls"

Pero no estoy seguro de los permisos necesarios para ejecutar comandos como ese a través de rieles.

Respondido 04 Jul 12, 09:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.