2009-02-26 13 views
63

Para especial tareas Rieles tenemos algunas alternativas de implementación, entre los que parecería ser:Tengo una tarea de Rieles: ¿debo usar script/runner o rake?

script/runner some_useful_thing 

y:

rake some:other_useful_thing 

Qué opción debería preferir? Si hay un claro favorito, entonces, ¿cuándo debería considerar usar el otro? Si nunca, ¿por qué supondrías que todavía está presente en el marco sin advertencias de desaprobación?

Respuesta

56

La diferencia entre ellos es que script/runner botas rieles mientras que una tarea de Rake no menos que usted le diga que al hacer la tarea dependen de :environment, así:

task :some_useful_task => :environment do 
    # do some useful task 
end 

Dado que arrancar los rieles es costoso, puede valer la pena saltar si puede evitarlo.

Aparte de eso, son aproximadamente equivalentes. Uso ambos, pero últimamente he usado script/runner ejecutando un script por separado más.

2

Para comandos únicos, el script/runner puede estar bien. Para cualquier cosa que se repita, una tarea de rake es más fácil a largo plazo, y tiene un resumen si olvida lo que hace.

2

Obtuve el script de impresión/el corredor era principalmente para tareas periódicas. Por ejemplo, una tarea programada que se ejecuta:

SomeClass.update_from_web('http://www.sourcefordata.gov/') 
+0

Nada de lo que he visto sobre una tarea 'runner' requiere o implica que sea para trabajos cron principalmente. En cambio, considero runner para tareas que no necesitan la capa de presentación de Rails pero que quieren acceso a la base de datos y los modelos, y que no colocaría en un controlador o modelo porque no tiene sentido ponerlo allí. –

5

Una cosa que he hecho es escribir scripts de ruby ​​normales y ponerlos en el directorio script/maintenance.

Todo lo que necesita hacer para cargar raíles y obtener acceso a todos sus modelos, etc., es poner require '../../config/environment.rb' en la parte superior de su archivo, y luego estar lejos.

+0

¿No tendría más sentido poner esto en tareas de rake? –

+1

Por qué molestarse con la complejidad añadida de una tarea de rake. De esta forma, solo tenemos un archivo que se puede ejecutar como cualquier otro script en un sistema * nix –

+4

^^ para aclarar: Rake es genial, y lo usaría si necesitara dependencias, etc., pero si no lo hace, es solo una cosa más en la que pensar sin ningún motivo –

10

Fwiw parece que hay alguna movement away from using script runner a favor de rake:

Update (4/25/2009): Recomiendo el uso de tareas rastrillo en lugar de script/corredor para tareas repetitivas.

También, como per this post puede utilizar el rastrillo para tareas recurrentes bien:

si yo quería esto para ejecutar cada noche en mi base de datos de producción a la medianoche, yo podría escribir una tarea programada que se ve algo como esto:

0 0 * * * cd/var/www/aplicaciones/rails_app/& &/usr/local/bin/rastrillo RAILS_ENV = utils de producción: send_expire_soon_emails

+2

Su primer enlace está muerto, no estoy seguro de si el artículo se ha eliminado o si simplemente se reordenó el blog. – gravitystorm

+2

No estoy seguro de que una sola publicación de blog (que, lamentablemente, no explica sus razones para su reclamo de rake-vs-runner) realmente cuente como un movimiento. –

9

Corregido en el comentario 2 abajo. ¡Denles el karma!

FWIW - Rails 3.0+ cambia la forma de inicializar el sistema Rails en una secuencia de comandos independiente.

require File.dirname(__FILE__) + '/config/environment' 

Como se mencionó anteriormente también se puede hacer:

rails runner script/<script name> 

O dicho de todo el código en una tarea Rake, pero tengo un montón de código heredado de los carriles 2; así que no quería ir por ese camino de inmediato.

Cada uno tiene sus ventajas y desventajas.

3

En Rails 3.0+, el config/environment.rb requiere el config/application.rb, que requiere el config/boot.rb.

Así, para cargar una aplicación en Rails 3, aún es suficiente con exigir a los Paso de parámetros environment.rb

9

a una tarea rake es un dolor en el trasero, por decir lo menos. O necesita recurrir a variables de entorno o un sistema de parámetros muy hackish que no es intuitivo y tiene muchas salvedades.

Si su tarea necesita manejar los argumentos de línea de comando correctamente, escribir un script es el camino a seguir.

Luke Francl menciona script/runner arrancando Rails. Es verdad. Pero si no desea arrancar los rieles, simplemente ejecute el guión tal como está sin script/runner. Entonces, la única diferencia real entre los scripts y las tareas de rake es su estética. Elija lo que se sienta bien para usted.

Utilizo tareas de rastreo para pequeñas tareas (una o dos líneas). Algo más complicado entra en el script/directorio. Romperé esta regla si creo que otros desarrolladores esperarán que el código viva en un lugar sobre otro.

Cuestiones relacionadas