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...
}
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? –
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
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