2010-03-12 2 views
4

Avoir une application qui a des «listes» - pensez annonces classées - et chaque liste a une liste de tags.Problème lors de l'exécution de l'application RoR dans l'environnement de production

Le code suivant échoue quand je lance l'application en mode de production, mais fonctionne très bien en mode de développement

uninitialized constant ActiveRecord::Acts::Taggable::InstanceMethods::TagList 
Extracted source (around line #45): 

42:   
43:   <span class="listingIndexTags"> 
44:    Location: [location] | Tags: 
45:    <% tag_list = listing.tag_list %> 
46:    <% if tag_list != nil %> 
47:     <% for tag in tag_list %> 
48:      <%= link_to tag.to_s, { :action => "filter_on", 

La ligne de commande que je utilise pour commencer mon exemple bâtarde dans ce cas de test: script Ruby/server mongrel -e production

Par défaut le port 3000. Je peux accéder à d'autres vues dans l'application que NE PAS appeler "listing.tag_list".

".tag_list" est fourni par "acts_as_taggable_on_steroids", que j'utilise dans cette application. Il est installé comme une gemme.

Peut-être que mes fichiers d'environnement sont bancaux?

Voici mon fichier development.rb

config.cache_classes = false 

config.whiny_nils = true 

config.action_controller.consider_all_requests_local = true 
config.action_view.debug_rjs       = true 
config.action_controller.perform_caching    = false 

config.action_mailer.raise_delivery_errors = true 

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    ...took these settings out for this post... 
} 

Et mon fichier production.rb ...

config.cache_classes = true 
config.threadsafe! 

config.action_controller.consider_all_requests_local = false 
config.action_controller.perform_caching    = true 

config.cache_store = :mem_cache_store 

config.action_mailer.raise_delivery_errors = false 

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    ...took these settings out for this post... 
} 
+0

Cela a certainement à voir avec le paramètre cache_classes. Pour le réduire, que se passe-t-il si vous désactivez la mise en cache des classes en production?En outre, quelle version de Rails utilisez-vous? –

+0

il est possible que l'erreur apparaisse sur la machine de développement si vous supprimez et reconstruisez la base de données. Je rencontre souvent des problèmes de ce genre et c'est parce que la base de données de développement contient des entrées plus anciennes qui répondent à certains besoins de l'application mais la base de données de production ne les contient pas parce qu'elle est fraîche. Parfois, au fur et à mesure que l'application se développe, nous modifions le code de telle sorte qu'il échoue lorsque la base de données est vide ... juste une chance dans le noir si tout le reste échoue. – stephenmurdoch

+0

aussi, quel genre de tests (intégration en particulier) avez-vous? la suggestion ci-dessus ne serait pas nécessaire si vos tests étaient adéquats et réussis – stephenmurdoch

Répondre

1

FIXES:

Eh bien, après avoir mis hors corriger ce bug jusqu'à ce que je devais absolument (aujourd'hui), je enfin trouvé la source du problème.

L'inclusion de la ligne: config.threadsafe!

Dans mon "production.rb" le causait.

I finally found it by: 
    1. Making my production and development environment files identical 
    2. Line-by-line, changing the production environment file until it either: 
     a. The app broke in production mode 
     b. I was back to my original production file 

De toute façon, quand je suis arrivé à ajouter le "config.threadsafe!" ligne - IT BROKE! Je n'ai jamais été si heureux d'avoir une pause d'application. Donc, un peu de lecture pour comprendre ce que fait exactement cette option, en conjonction avec Mongrel (si Mongrel est même pertinent), et j'aurai ma réponse.

+0

Très bon travail J'ai eu le même problème ici Damn' threadsafe! 'réglage d'un ancien déploiement JRuby nous avons essayé. –

0

Avez-vous la pierre précieuse acts_as_taggable_on_steroids installé sur votre serveur de production?

+0

Je fais. La même chose se passe sur ma machine de développement, comme il se trouve, quand je lance mongrel dans un environnement de «production», donc rien de spécifique au serveur comme il s'avère. J'ai aussi la ligne 'config.gem "acts_as_taggable_on_steroids' dans mon fichier environment.rb, donc je m'attendrais à ce qu'il s'applique à tous les environnements, si je comprends bien, – jefflunt

+0

vous exécutez 'gem list' sur le serveur –

+0

oui c'est dans cette liste – jefflunt

1

est venu ici avec le même problème et je voulais juste remettre une note à tout le monde connaît la même .... J'ai réussi à régler ce problème en fixant ce la version de pierres précieuses dans environment.rb

changé cette
config.gem "actes-as-tagable-on",: source => "http://gemcutter.org"

à ceci:
config.gem "actes-as-tagable-on",: source => "http://gemcutter.org",: version => '2.0.0.rc1'

et exécuter un rake gems: installer

Je me demande si vous avez exécuté d'une manière ou d'une autre différentes gemmes sur différents environnements si cela est possible.

Questions connexes