2012-05-30 15 views
6

Ho alcuni problemi con uno dei principali supporto della memorizzazione nella cache di ActiveModel. Quando utilizzo Observer per il modello memorizzato nella cache, durante l'inizializzazione dell'applicazione tenta di descrivere la tabella per ottenere tutti i nomi dei campi.Come ottenere il nome dell'attuale rake nel mio modello Rails?

La stessa operazione viene eseguita quando è in esecuzione l'attività rake, incluso db: migration. In tal caso c'è qualche errore di riferimento circolare. Mi piacerebbe rilevare l'attività di rake corrente, per saltare l'inizializzazione della gemma, ma non so come scoprire che il codice è stato invocato tramite l'attività rake. Come controllarlo?

+0

"una delle gem che supporta il caching di ActiveModel" - quale? –

risposta

1

Se si esegue il compito tramite rake task o bundle exec rake task è possibile verificare nel vostro initializer semplicemente:

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

È possibile utilizzare $PROGRAM_NAME invece di $0, se volete.

11

Non ho esattamente quello che stai cercando di fare, ma ecco un esempio di come ottenere il nome del compito.

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

Se si hanno compiti con nomi, questo dovrebbe funzionare 'puts task_name.name.split (':'). Last' (in rake v10.4.2). – spyle

8

Questa domanda è stato chiesto un paio di posti, e io non credo che nessuno delle risposte erano molto buono ... io che la risposta è quello di verificare Rake.application.top_level_tasks, che è un elenco di attività che verrà eseguito . Rake non esegue necessariamente solo l'attività una.

+0

Sì, la domanda posta per ottenere il nome e la risposta selezionata mostra come rilevare se ci si trova in un rake. Questa è la risposta esatta. – method

+0

Penso che questo sia più elegante dell'aggiunta di 'do | nome attività |'. –

Problemi correlati