我遇到了一个非常简单的Ramaze项目的问题。我的项目与'ramaze create mywebsite'生成的原型项目完全相同,只是我使用的是Haml模板(我在controller / init.rb中设置'engine:Haml')。
以下是重现问题的步骤:
启动开发服务器后,只有第一个请求才能正确呈现。
我只认为它与Haml有关,因为在切换回Ramaze的默认引擎后,一切正常。我所有的宝石都是最新的。
有什么想法吗?
谢谢!
答案 0 :(得分:3)
通过将一些假设的改进恢复为Ramaze处理Haml视图的方式来修复它。即使@content变量发生了变化,它也会缓存布局结果。 我还添加了一个规范,以便将来不会发生这种情况:spec/ramaze/view/haml.rb
答案 1 :(得分:2)
您可以尝试将haml.rb恢复到您在Ramaze上提交45db6fe0696dfac7deeebba42c62c6bcca8bab10之前的状态吗?这修复了我的应用程序上的错误。
我认为错误是由此引起的:
导致错误的新haml.rb:
haml = View.compile(string) do |s|
::Haml::Engine.new(s,options).render_proc(action.instance,*action.variables.keys)
end
缓存render_proc
的返回值。使用的密钥是AFAIK,未处理的布局Haml的校验和。问题是render_proc
绑定到存储@content
的action.instance。
这意味着每次我们使用相同的布局(以及相同的缓存键)渲染页面时,我们使用的是渲染第一页时使用的action.instance
。结果是我们总是得到填充相同实例变量的相同布局。
我认为执行该修补程序的人假设人们在其布局中使用了局部变量(content
)而不是实例变量(@content
)。实际上,如果在布局中使用content
而不是@content
,则错误似乎消失了。
答案 2 :(得分:1)
找出解决方法!问题涉及Innate :: View缓存系统。通过禁用视图缓存:
Innate::View.options.cache = false
问题得到解决。显然这并不理想,但我宁愿不缓存视图并暂时使用Haml。我花了一些时间试图弄清楚Innate :: View出了什么问题,但我没找到任何东西。
答案 3 :(得分:-1)
一个星期前在#ramaze频道报道了这个错误......听起来似乎已经没有修复了。