¿Hay alguna forma de pasar el archivo ruby, foo.rb a la consola de rieles? Los resultados esperados serían después de que la consola inicie el entorno de rieles para ejecutar el archivo.
O cualquier otra forma que me permita ejecutar un archivo en un entorno de rieles, activado desde el símbolo del sistema.
ruby-on-rails-3
Haris Krajina
fuente
fuente
Respuestas:
En realidad, la forma más sencilla es ejecutarlo con el
load
interior delrails console
fuente
Puedes usar
ACTUALIZAR:
Lo que también hemos estado usando mucho últimamente es cargar el entorno de rails desde el propio script. Considere
doit.rb
:Esto también funciona si el script o el directorio de trabajo actual no están dentro del directorio de la aplicación rails.
fuente
f=File.new('path/to/file')
para ejecutar use:f.rewind; eval f.readlines.join("\n");
eval(File.read ...)
pieza. Rails acepta un archivo Ruby como argumento pararails runner
:Usage: rails runner [options] [<'Some.ruby(code)'> | <filename.rb>]
rails r path/to/filename.rb
es funcionalmente equivalente albundle exec rails runner
comando mencionado anteriormente.Mientras tanto, se ha apoyado esta solución.
Mucho más simple ahora.
fuente
simple, sucio y bloquea el proceso al final, pero hace el trabajo exactamente como yo quería.
fuente
Considere la posibilidad de crear una tarea de rastrillo.
Para el código que necesito para crear registros o admitir migraciones, por ejemplo, a menudo creo una tarea de rake como esa a partir de esta respuesta . Por ejemplo:
En
lib/tasks/example.rake
:Y luego en la terminal ejecuta:
fuente
De estos enfoques mencionados anteriormente, ninguno parecía limpio e ideal, como esperaría que se ejecutara un script independiente (no se evalúe o se canalice a través de <redirección), pero finalmente esto funciona perfecto para mí:
(para rieles 3)
Inserte en la parte superior de su secuencia de comandos:
Por supuesto, configure su propia ruta de la aplicación Rails en la línea APP_PATH.
De esa manera, puedo evitar tener que ingresar a cualquier interactivo
irb
orails c
y puedo probar mi script.rb desde el indicador de shell, antes, por ejemplo. programarlo en crontab.También admite sin problemas los parámetros de la línea de comandos y minimiza los niveles de envoltorios antes de acceder a su código.
CRÉDITO (también muestra un ejemplo de Rails 2)
http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html
fuente
Aquí está el truco que estoy usando:
Ejemplo:
Basado en la respuesta de @ moritz aquí. Lo cambié, ya que el directorio de trabajo
File.read
es la raíz del proyecto Rails.Sé que esto es una herejía seria, usar Python para ayudar a un script ruby. Pero no pude encontrar un
relpath
método integrado en ruby.Crédito:
relpath()
fue tomado de @MestreLion, Convertir ruta absoluta en ruta relativa dado un directorio actual usando Bashfuente