首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ramaze的Haml引擎每次返回相同的模板

Ramaze的Haml引擎每次返回相同的模板
EN

Stack Overflow用户
提问于 2010-01-14 00:46:50
回答 4查看 843关注 0票数 2

我遇到了一个非常简单的Ramaze项目的问题。我的项目与从'ramaze创建我的网站‘生成的原型项目相同,但我使用的是Haml模板(我在控制器/init.rb中设置了'engine :Haml’)。

以下是重现问题的步骤:

  1. 启动开发服务器。我用的是瘦。
  2. 访问应用程序中的一个动作。到目前为止,我已经有了'/',‘关于’和‘/注册’。操作模板将正确呈现。
  3. 访问不同的行动。这一次,将返回为第一个操作呈现的完全相同的内容。

只有启动dev服务器后的第一个请求才会正确呈现。

我只认为这与Haml有关,因为在切换回Ramaze的默认引擎后,一切都按其应有的方式工作。我所有的宝石都是最新的。

有什么想法吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-02 09:54:40

修正了它,恢复了对Ramaze处理Haml视图的方式的一些假定改进。即使@content变量发生了更改,它也会缓存布局的结果。我还添加了一个规范,这样以后就不会发生这种情况了:规格/雷迷宫/视图/Haml.rb

票数 3
EN

Stack Overflow用户

发布于 2010-01-19 11:07:03

您能否尝试将haml.rb恢复到在您的Ramaze上提交45db6fe0696dfac7debba42c62c6bcca8bab10之前的状态?修复了我应用程序上的窃听器。

我猜想这个bug是由以下原因引起的:

导致错误的新haml.rb:

代码语言:javascript
复制
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似乎就消失了。

票数 2
EN

Stack Overflow用户

发布于 2010-01-17 23:30:04

想出解决办法!这个问题与先天的::View缓存系统有关。通过禁用查看缓存:

代码语言:javascript
复制
Innate::View.options.cache = false

问题已经解决了。显然,这并不理想,但我暂时不想缓存视图并使用Haml。我花了一些时间试图找出先天的什么问题::观点,但我没有发现任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2061468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档