2014-05-12 1 views
0

Je reçois une erreur de méthode non définie lors de l'exécution de rails sur une machine de préproduction. Le message d'erreur ressemble à ceci:Rails méthode non définie pour ActionView :: Helpers :: TagHelper

undefined method `content_tag' for module `ActionView::Helpers::TagHelper' 
    (in /home/user/my-rails-app/app/assets/javascripts/templates/general/test.mustache) 

L'erreur apparaît dans le fichier de mise en page, sur la ligne qui comprend 'application.js':

<%= javascript_include_tag "application" %> 

Le stacktrace ressemble à ceci:

kernel/delta/module.rb:39:in `alias_method' 
haml (4.0.5) lib/haml/helpers/action_view_mods.rb:74:in `__script__' 
haml (4.0.5) lib/haml/helpers/action_view_mods.rb:59:in `__script__' 
haml (4.0.5) lib/haml/helpers/action_view_mods.rb:38:in `__script__' 
haml (4.0.5) lib/haml/helpers/action_view_mods.rb:1:in `__script__' 
kernel/common/code_loader.rb:243:in `require' 
kernel/common/kernel.rb:705:in `require' 
activesupport (4.0.2) lib/active_support/dependencies.rb:229:in `require' 
activesupport (4.0.2) lib/active_support/dependencies.rb:214:in `load_dependency' 
activesupport (4.0.2) lib/active_support/dependencies.rb:229:in `require' 
haml (4.0.5) lib/haml/template.rb:3:in `__script__' 
kernel/common/code_loader.rb:243:in `require' 
kernel/common/kernel.rb:705:in `require' 
activesupport (4.0.2) lib/active_support/dependencies.rb:229:in `require' 
activesupport (4.0.2) lib/active_support/dependencies.rb:214:in `load_dependency' 
activesupport (4.0.2) lib/active_support/dependencies.rb:229:in `require' 
haml (4.0.5) lib/haml/railtie.rb:5:in `__script__' 
kernel/common/eval.rb:43:in `instance_eval' 
activesupport (4.0.2) lib/active_support/lazy_load_hooks.rb:38:in `execute_hook' 
activesupport (4.0.2) lib/active_support/lazy_load_hooks.rb:28:in `on_load' 
kernel/bootstrap/array.rb:66:in `each' 
activesupport (4.0.2) lib/active_support/lazy_load_hooks.rb:27:in `on_load' 
haml (4.0.5) lib/haml/railtie.rb:4:in `__script__' 
... 

Je crois que cette erreur est due au fait que le module ActionView::Helpers::TagHelper n'a pas content_tag défini au moment où Haml est chargé. (Le code correspondant est here). Pour une raison quelconque, ce problème n'apparaît pas dans d'autres environnements identiques. Quelqu'un peut-il suggérer un correctif/solution de contournement pour ce problème?

[UPDATE]

Cela se produit uniquement en mode développement. J'utilise rbx-2.2.6, actionpack version 4.0.2, et haml 4.0.5

+0

Je vois quelque chose de similaire dans une application Sinatra, mais seulement dans la production: ' constante non-initialisée Haml :: ActionView' de 'haml-4.0.5/lib/haml/template/plugin.rb: 4'. Tout ce que je devais faire était 'require' view_view/template/handlers/erb'' avant de 'require' haml/template/plugin'' –

Répondre

0

J'ai trouvé une solution de contournement récemment. Si vous vous assurez que la vue d'action est chargée, puis chargez manuellement haml, cela fonctionne correctement.

En application.rb, après avoir exigé des rails, mais avant d'exiger des pierres précieuses: empaquetés

require 'action_view' 
require 'haml' 

Merci à Isaac pour l'inspiration

Questions connexes