【问题标题】:Using Erubis 2.6.2 with Rails 2.2.2 is incompatible?使用 Erubis 2.6.2 和 Rails 2.2.2 不兼容?
【发布时间】:2008-12-23 15:34:49
【问题描述】:

据说安装erubis很简单:

gem install erubis

# And in environment.rb:
require 'erubis/helpers/rails_helper'

但我还没有发现是这样的。请注意,我的代码中没有明显的错误;它与 ERB 一起运行得很好。

  1. 我应该把这条线放在哪里?直接在 boot.rb 包含之后,它无法启动服务器,并且在文件末尾我得到一个意外的 nil 对象错误(nil.controller)。哪里最好?
  2. 与给定版本是否存在已知冲突?
  3. 是否有任何解决方法可以让 erubis 发挥作用?

【问题讨论】:

  • Erubis 2.6.4 支持 Rails 2.2 ——它最近才发布。

标签: ruby-on-rails ruby conflict erubis


【解决方案1】:
  1. 要么将其放在底部或 environment.rb 中,要么将其放入初始化程序 (config/initializers/anything.rb)。当你把它放在 Rails::Initializer 块之前时,rails 环境还没有完全加载,erubis/helpers/rails_helpers 似乎假设一个完全加载的 Rails 环境。
  2. 我从未使用过 erubis,所以无法回答。
  3. 解决方法?我猜,请参见 #1。

【讨论】:

  • 谢谢,但仍然需要摆脱那个讨厌的 nil 对象错误。 ://
  • 如果没有看到完整的堆栈跟踪以及堆栈跟踪指向的任何相关自定义代码,就不可能知道是什么原因造成的。
【解决方案2】:

【讨论】:

  • 确实它坏了,但我已经去了 HAML,没有回头。但是感谢您的回答,其他人可能会发现它有帮助。 :)
  • 从那时起,Erubis 2.6.4 已经问世,支持 Rails 2.2 和 2.3。
【解决方案3】:

最新的 Erubis (2.6.4) 和 Rails 2.2(和 2.3)仍然不兼容。主要问题是 Erubis 生成的 ruby​​ 代码使用“_buf”作为缓冲区变量,而 Rails 2.2 和 2.3 需要使用“@output_buffer”。

使用“@output_buffer”的原因是,像 CaptureHelper 这样的 ActionView 助手是围绕“@output_buffer”设计的,它是生成代码中的主要缓冲区。

我创建了一个名为 elkinsware-erubis_rails_helper 的 gem,它修复了这些问题并允许 Erubis 和 Rails 2.3(当然,但它应该适用于 2.2)。

在你的 environment.rb 文件中添加:

 config.gem 'erubis' , :version => '2.6.4'
 config.gem 'elkinsware-erubis_rails_helper', :lib => 'erubis_rails_helper', :source => 'http://gems.github.com'

然后您可以添加一个 config/initializers/erubis_config.rb,您可以在其中调整 Erubis/Rails 选项。

 #Erubis::Helpers::RailsHelper.engine_class = Erubis::Eruby # or Erubis::FastEruby
 #Erubis::Helpers::RailsHelper.init_properties = {}
 #Erubis::Helpers::RailsHelper.show_src = false
 #Erubis::Helpers::RailsHelper.preprocessing = true

来源在http://github.com/elkinsware/erubis_rails_helper/tree/master

如果您对 gem 有任何问题,请告诉我。

【讨论】:

猜你喜欢
  • 2013-12-11
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2017-03-05
  • 2019-02-25
  • 1970-01-01
相关资源
最近更新 更多