2010-11-08 12 views
0

J'utilise jruby-1.5.3 avec une application rails 2.3.5. Je viens juste de commencer à jouer avec la sécurité de fil à l'aide:Rails 2.3.5 threadsafe! brise mes migrations

config.threadsafe! 
config.eager_load_paths << "#{RAILS_ROOT}/lib" 

Ce qui fonctionne très bien, je viens de remarquer cependant sur le déploiement de mon environnement de mise en scène (qui a la même configuration que la production) que je reçois des constantes non définies. Par exemple, une migration qui ajoute un autre rôle à une table de rôle:

class AddSuperAdminRole < ActiveRecord::Migration 
    def self.up 
    Role.create :rolename => 'super_admin' 
    end 
end 

jette un:

uninitialized constant AddSuperAdminRole::Role 

Il fonctionne très bien dans un environnement de dev parce que je ne suis pas en cours d'exécution qui multithread donc je sais que c'est la problème. J'ai essayé de charger le chemin app/models aussi mais cela n'a pas fonctionné. Comment faire fonctionner les migrations avec threadsafety?

Répondre

1

en passant à la version 2.3.10.

+0

Y a-t-il un billet de blog ou quelque chose à propos de ça? En scannant les commits je ne vois pas de solution, et j'aimerais vraiment voir si c'est dans la nouvelle version des rails 3. Merci! – mixonic

+0

non n'a pas vu un article de blog du tout, juste cherché la source ... ne peut pas réellement trouver le commit actuellement, mais je vous tiendrai au courant quand je fais – brad

0

À partir du billet #2506 sur le site du phare de Rails. Ci-dessous j'ai lié la méthode threadsafe dans Rails. Vous verrez que config.dependency_loading est défini sur false car il n'est pas thread-safe et par conséquent les migrations obtiennent automatiquement leurs dépendances.

# Enable threaded mode. Allows concurrent requests to controller actions and 
# multiple database connections. Also disables automatic dependency loading 
# after boot, and disables reloading code on every request, as these are 
# fundamentally incompatible with thread safety. 
    def threadsafe! 
     self.preload_frameworks = true 
     self.cache_classes = true 
     self.dependency_loading = false 
     self.action_controller.allow_concurrency = true 
     self 
    end 

est ici la réponse de Joshua Peek au problème dans les commentaires au billet:

je suggère exigeant que les modèles le dont vous avez besoin dans la migration, ou mieux, y compris la définition du modèle à nouveau si la migration ne dépend pas sur son existence.

+0

Y ai lu un peu de cela, a également trouvé un post sur la mise à niveau 2.3.10, qui comprend un correctif. Donc, j'ai juste mis à jour. – brad