2013-04-08 14 views
7

Ho cercato di eseguire rake db:test:clone_structure, ma continua a non riuscire a ricostruire il database. Alla fine ho guardato il compito stesso:Dipendenza del rastrello non in esecuzione ma invoca i lavori

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] 

Quando eseguo la traccia, ho notato che db:test:load_structure non è sempre eseguita:

$ rake db:test:clone_structure --trace 
** Invoke db:test:clone_structure (first_time) 
** Invoke db:structure:dump (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:structure:dump 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:clone_structure 

Ora, quando cambio il compito clone_structure-invocareload_structure ...

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] do 
    db_namespace["test:load_structure"].invoke 
end 

... tutto funziona improvvisamente!

$ rake db:test:prepare --trace 

** Invoke db:test:clone_structure (first_time) 
** Invoke db:structure:dump (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:structure:dump 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:clone_structure 
** Invoke db:test:load_structure (first_time) 
** Invoke db:test:purge 
** Execute db:test:load_structure 
** Invoke db:structure:load (first_time) 
** Invoke environment 
** Invoke db:load_config (first_time) 
** Execute db:load_config 
** Execute db:structure:load 

Cosa potrebbe causare questo comportamento? Sto usando Rails 3.2.14 e Rake 10.1.0.

AGGIORNATO: Ho aggiornato Rails a 3.2.13 da 3.2.11 ed è ancora un problema.

AGGIORNATO IL SECONDO: ho aggiornato Rails a 3.2.14 e rastrello per 10.1.0 ed è ancora un problema

+0

Il tuo structure.sql viene creato senza problemi quando si esegue 'rake db: test: clone_structure'? Vedi qualche problema con esso? –

+0

Puoi provare a eseguire 'RAILS_ENV = test rake db: test: prepare --trace'? A volte ho visto che 'RAILS_ENV' doveva essere impostato per certe attività da eseguire. – Subhas

+0

@yuri: db: test: clone_structure sembra funzionare perfettamente. Farò alcuni debug per essere sicuro. – abeger

risposta

0

Dopo attaccare una traccia dello stack in uno dei compiti che sapevo era in fase di chiamato, ho trovato il problema. Non ha nulla a che fare con ActiveRecord o Rake e tutto ciò che riguarda la gemma activerecord-oracle_enhanced-adapter, che sto usando anche io.

In sostanza, la gemma sostituisce il compito db:test:clone_structure in questo modo:

redefine_task :clone_structure => [ "db:structure:dump", "db:test:purge" ] 

Nota che manca qualsiasi riferimento alla db:test:load_structure.

Ho inviato un progetto issue e pull request al progetto, quindi dovrebbe essere risolto nel prossimo futuro.

1

direi siete quasi arrivati. Per quanto ne so la convenzione rake per questo sarebbe ...

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] do 
    Rake::Task["clone_structure"].invoke 
end 

In caso contrario, io preferisco ...

task :clone_structure do 
    Rake::Task["db:structure:dump"].invoke 
    Rake::Task["db:test:load_structure"].invoke 
end