2012-03-22 9 views
7

Quando eseguivo Heroku Bamboo, questo non era mai stato un problema. Ora, su Cedar, ottengo errori ogni volta che provo ad accedere ai miei modelli da una task rake sul server. Ciò si verifica con rake db:seed, un'attività di rake standard, nonché le mie attività personalizzate che includono esplicitamente: ambiente. Ho anche fare in modo ridondante:Le attività di Rake di produzione non riconoscono i miei modelli

namespace :db do 
    desc "Update db" 
    task :new_seed => :environment do 
    require './Scraped_Data/Games/code/column-headers.rb' 
    require 'csv' 
    require 'net/http' 
    require './config/environment.rb' 

    # code here... 

    end 
end 

non riesco a trovare alcuna menzione di questo problema altrove, e tutti questi compiti funzionare perfettamente in fase di sviluppo. Grazie per eventuali approfondimenti, ed ecco i compiti rake messaggio di errore completo sputano fuori non appena incontrano un modello di mine su Heroku:

rake aborted! 
uninitialized constant Object::Movie 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/ext/module.rb:36:in `const_missing' 
/app/lib/tasks/new_seed.rake:187:in `block in load_scraped_data' 
/app/vendor/bundle/ruby/1.9.1/gems/rest-open-uri-1.0.0/lib/rest-open-uri.rb:37:in `open' 
/app/vendor/bundle/ruby/1.9.1/gems/rest-open-uri-1.0.0/lib/rest-open-uri.rb:37:in `open' 
/app/lib/tasks/new_seed.rake:148:in `load_scraped_data' 
/app/lib/tasks/new_seed.rake:550:in `block (2 levels) in <top (required)>' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain' 
/usr/local/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/app/vendor/bundle/ruby/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' 
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in `load' 
/app/vendor/bundle/ruby/1.9.1/bin/rake:19:in `<main>' 
Tasks: TOP => db:new_seed 
+1

Sospetto che ciò non funzioni per un motivo diverso .. In particolare se si esegue "heroku run console" è possibile caricare "Movie" lì? –

+0

Sì, posso. Non ho problemi ad accedere a tutti i miei modelli dalla console. Ho appena ricontrollato e Movie funziona bene da 'heroku run console'. –

+2

Ho avuto 'threadsafe! = true' configurato nel mio ambiente di produzione. Questo ha causato il problema. –

risposta

20

Per impostazione predefinita threadsafe set dependency_loading = false
Se si desidera attivare threadsafe nella propria applicazione e l'accesso al tuo modelli nel tuo compito, dovrai caricarlo.

# Enable threaded mode 
config.threadsafe! 
config.dependency_loading = true if $rails_rake_task 


Ref .: http://nowhereman.github.com/how-to/rails_thread_safe/

Spero che questo aiuto!

+0

'$ rails_rake_task' non è più definito nelle versioni recenti di rake o rails, ma puoi comunque impostare manualmente' $ rails_rake_task = true' nel tuo Rakefile. –