2012-05-30 12 views
6

Tengo algunos problemas con una de las gemas que admite el almacenamiento en caché de ActiveModel. Cuando estoy usando el observador para el modelo en caché, durante la inicialización de la aplicación intenta describir la tabla para obtener todos los nombres de los campos.¿Cómo obtener el nombre de la tarea actual de rake en mi modelo de Rails?

Lo mismo se hace cuando la tarea de rake se está ejecutando, incluida db: migration. En ese caso, hay algún error de referencia circular. Me gustaría detectar la tarea de rake actual, omitir la inicialización de la gema, pero no sé cómo averiguar el código invocado a través de la tarea de rake. ¿Cómo verificarlo?

+0

"one of gem supporting ActiveModel caching" - ¿cuál? –

Respuesta

1

Si ejecuta su tarea a través rake task o bundle exec rake task se puede comprobar en su inicializador simplemente por:

if $0.end_with?('rake') 
    # rake stuff 
else 
    # non-rake stuff 
end 

Se puede utilizar en lugar de $PROGRAM_NAME$0 si lo desea.

11

No entiendo exactamente lo que intenta hacer, pero he aquí un ejemplo de cómo obtener el nombre de la tarea.

task :testing do |task_name| 
    puts task_name 
    end 
+0

Si tiene tareas de espacio de nombres, esto debería funcionar 'puts nombre_tarea.nombre.nombre.split (':'). Last' (en rake v10.4.2). – spyle

8

Esta pregunta se ha hecho un par de lugares, y yo no creo que ninguna de las respuestas eran muy buenos ... I que la respuesta es comprobar Rake.application.top_level_tasks, que es una lista de las tareas que se ejecutará . Rake no necesariamente ejecuta solo una tarea.

+0

Sí, la pregunta acerca de cómo obtener el nombre y la respuesta seleccionada muestra cómo detectar si está en una tarea de rake. Esta es la respuesta correcta. – method

+0

Creo que esto es más elegante que agregar 'do | nombre de la tarea |'. –

Cuestiones relacionadas