Rails 3 not loading HAML handler

懵懂的女人 提交于 2020-01-03 10:22:04

问题


I'm having some problems with Rails 3 and HAML in my application: for some reason Rails appears not to be loading the handler for dealing with haml files. Every action gives an error message similar to this one:


Template is missing

Missing template contact_search/index with {:formats=>[:html], :handlers=>[:rjs, :rhtml, :rxml, :builder, :erb], :locale=>[:en, :en]} in view paths "/var/www/osphonebook/app/views", "/var/www/osphonebook/vendor/bundle/ruby/1.8/gems/devise-1.3.4/app/views"


Look at the "handlers" options: it does not have :haml...

The thing is that this only happens during production mode on the server set up by my company. On development and test modes it works fine. Also, if I start the application in production mode on my development PC, it works.

Some info about the server:

UPDATE (6/6/2011): upgraded to Ruby 1.9, and it still does not work.

ruby 1.9.2p0 (2010-08-18 revision 29036) [i486-linux]

Gems included by the bundle:
abstract (1.0.0)
actionmailer (3.0.7)
actionpack (3.0.7)
activemodel (3.0.7)
activerecord (3.0.7)
activeresource (3.0.7)
activesupport (3.0.7)
arel (2.0.10)
bcrypt-ruby (2.1.4)
builder (2.1.2)
bundler (1.0.14)
devise (1.3.4)
erubis (2.6.6)
haml (3.1.1)
i18n (0.5.0)
kgio (2.4.1)
mail (2.2.19)
mime-types (1.16)
orm_adapter (0.0.5)
pg (0.11.0)
polyglot (0.3.1)
rack (1.2.3)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.7)
railties (3.0.7)
rake (0.8.7)
sass (3.1.2)
sqlite3 (1.3.3)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.27)
unicorn (3.6.2)
warden (1.0.4)

If more info is needed, please comment the question, and I'll update it. Thanks for any help.


回答1:


Try with the gem haml-rails




回答2:


I've found the problem: I had changed the config/environments/production.rb file to set some personalized code for the ActionMailer. The thing is that I was using the class directly, like this:

ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.charset = "utf-8"

instead of doing like this:

config.action_mailer.delivery_method = :sendmail
config.action_mailer.raise_delivery_errors = true
config.action_mailer.charset = "utf-8"

It appears that using the ActionMailer class directly fired the ActionView loaders, and set all the internal variables, preventing the HAML code to install itself.

After changing the code it worked like a charm.




回答3:


I found the solution to the 'missing HAML template' error when running in production mode (using Rails 3.2.6 and haml-rails 0.3.4):

In /config/application.rb it has

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

I changed this to

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  # Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  Bundler.require(:default, :assets, Rails.env)
end

And now it works.




回答4:


Does adding

require "haml"

to config/test.rb (and/or development.rb and production.rb) fix this for you?

(Note that I'm using Rails 3.2.2)



来源:https://stackoverflow.com/questions/6227945/rails-3-not-loading-haml-handler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!