我遇到了一个非常简单的Ramaze项目的问题。我的项目与从'ramaze创建我的网站‘生成的原型项目相同,但我使用的是Haml模板(我在控制器/init.rb中设置了'engine :Haml’)。
以下是重现问题的步骤:
只有启动dev服务器后的第一个请求才会正确呈现。
我只认为这与Haml有关,因为在切换回Ramaze的默认引擎后,一切都按其应有的方式工作。我所有的宝石都是最新的。
有什么想法吗?
谢谢!
发布于 2010-02-02 09:54:40
修正了它,恢复了对Ramaze处理Haml视图的方式的一些假定改进。即使@content变量发生了更改,它也会缓存布局的结果。我还添加了一个规范,这样以后就不会发生这种情况了:规格/雷迷宫/视图/Haml.rb
发布于 2010-01-19 11:07:03
您能否尝试将haml.rb恢复到在您的Ramaze上提交45db6fe0696dfac7debba42c62c6bcca8bab10之前的状态?修复了我应用程序上的窃听器。
我猜想这个bug是由以下原因引起的:
导致错误的新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,那么bug似乎就消失了。
发布于 2010-01-17 23:30:04
想出解决办法!这个问题与先天的::View缓存系统有关。通过禁用查看缓存:
Innate::View.options.cache = false问题已经解决了。显然,这并不理想,但我暂时不想缓存视图并使用Haml。我花了一些时间试图找出先天的什么问题::观点,但我没有发现任何东西。
https://stackoverflow.com/questions/2061468
复制相似问题