2010-02-05 6 views
6

J'essaye de graver ma base de données avec la méthode standard db/seeds.rb. Cela fonctionne très bien sur ma machine de développement, mais sur mon serveur, je reçois:db: seed ne charge pas les modèles

$ sudo rake db:seed RAILS_ENV=production --trace 
** Invoke db:seed (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:seed 
rake aborted! 
uninitialized constant Permission 
/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing' 
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:92:in `const_missing' 
/path/.../.../.../.../db/seeds.rb:4 
/usr/local/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/tasks/databases.rake:215:in `load' 
/usr/local/lib/ruby/gems/1.8/gems/rails-2.3.4/lib/tasks/databases.rake:215 
/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
... 

Mais quand je vérifie dans la console, le modèle existe:

$ script/console production 
Loading production environment (Rails 2.3.4) 
>> Permission 
=> Permission(id: integer, ..., created_at: datetime, updated_at: datetime) 

Qu'est-ce que j'oublie?

+0

Notez qu'il fonctionne bien dans un environnement de développement sur mon serveur de production. – Eli

+0

Comment ressemble votre seeds.rb? –

+0

Je l'ai réparé. J'ai désactivé 'threadsafe! – Eli

Répondre

6

Il peut être corrigé en désactivant threadsafe! dans la configuration de l'environnement.

2

Je viens de traverser une bonne approche de ce problème in this article. Je vais résumer ici pour que les gens puissent (espérons-le) le trouver plus rapidement.

L'idée est de désactiver threadsafe dans l'environnement de production, d'abord en éditant config/environnements/production.rb:

config.threadsafe! unless ENV['THREADSAFE'] == 'off' 

Vous pouvez alors faire THREADSAFE = lorsque les tâches de râteau en cours d'exécution.

10

Dans un commentaire sur le blog posté lien ci-dessus et là encore: http://www.builtfromsource.com/2011/02/09/getting-rake-dbseed-and-config-threadsafe-to-play-nice/

Bruce Adams mentionne que l'on peut appeler:

config.threadsafe! sauf $ rails_rake_task

pour activer uniquement threadsafe lorsque vous n'exécutez pas une tâche de rake.

Mais comme le problème est vraiment que threadsafe désactive dependency_loading, vous pouvez simplement ajouter cette ligne après config.threadsafe! pour le laisser activé, mais charge toujours votre environnement comme vous vous y attendez.

config.dependency_loading = true si rails_rake_task $