我在应用程序中使用Rails3和HAML时遇到了一些问题:出于某种原因,Rails似乎没有加载处理HAML文件的处理程序。每一个操作都会发出类似于以下的错误信息:
模板丢失
在视图路径"/var/www/sphonebook/app/views"、"/var/ww/wsphonebook/vender/bundle/ruby/1.8/gems/device-1.3.4/app/views"中,缺少具有{:formats=>[:html]、:handlers=>[:rjs、:rhtml、:rxml、:builder、:erb]、:locale=>[:en、:en]}的模板contact_search/index
看看"handlers"选项:它没有:haml。。。
问题是,这种情况只发生在我公司设置的服务器上的生产模式下。在开发和测试模式方面,它运行良好。此外,如果我在我的开发PC上以生产模式启动应用程序,它就会工作。
关于服务器的一些信息:
更新(2011年6月6日):升级到Ruby1.9,但仍然不起作用。
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)
如果需要更多信息,请评论这个问题,我会更新它。谢谢你的帮助。
尝试使用gem-haml-rails
我发现了问题:我更改了config/environments/production.rb
文件,为ActionMailer设置了一些个性化代码。问题是我直接使用了这个类,就像这样:
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.charset = "utf-8"
而不是这样做:
config.action_mailer.delivery_method = :sendmail
config.action_mailer.raise_delivery_errors = true
config.action_mailer.charset = "utf-8"
使用ActionMailer类似乎直接启动了ActionView加载程序,并设置了所有内部变量,从而阻止了HAML代码自行安装。
更改代码后,它就像一个符咒。
我找到了在生产模式下运行时"缺少HAML模板"错误的解决方案(使用轨道3.2.6和haml轨道0.3.4):
在/config/application.rb
中,它具有
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
我把这个改成
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
现在它起作用了。
是否添加
require "haml"
到config/test.rb
(和/或development.rb
和production.rb
)为您修复此问题?
(注意,我使用的是Rails 3.2.2)