Rails 3未加载HAML处理程序



我在应用程序中使用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.rbproduction.rb)为您修复此问题?

(注意,我使用的是Rails 3.2.2)

相关内容

  • 没有找到相关文章

最新更新