Rails 开发模式下,修改文件,浏览器下不生效

lentg · 2013年06月17日 · 最后由 zgm 回复于 2013年06月20日 · 3020 次阅读

开发模式下,修改文件(Controller),浏览器下不生效,不知道是怎么回事,求解。 环境 XP 下 Rails 3.2.13 + Postgresql + Puma.经常要重启才生效。

你没把config.cache_classes打开吧?或是开启了config.reload_classes_only_on_change?监测下ActiveSupport::FileUpdateChecker这个类的updated?方法吧

#1 楼 @iBachue development.rb 配置 config.cache_classes = false/true都试过了,还是一样。还有修改coffeescript文件也不生效。

#2 楼 @lentg 那就按照我后面说的,调试ActiveSupport::FileUpdateChecker这个类的updated?方法

#3 楼 @iBachue 调试 ActiveSupport::FileUpdateChecker 这个类的 updated?方法,这点不会。

用 webrick,不要用 puma 试试?

#4 楼 @lentg 就是对

`rvm gemdir`/gems/activesupport-3.2.13/lib/active_support/file_update_checker.rb

这个文件做调试嘛,代码在

def updated?
  current_updated_at = updated_at
  if @last_update_at < current_updated_at
    @updated_at = updated_at
    true
  else
    false
  end
end

需要检测这个方法是否确实被调用过,返回值又是 true 还是 false,这个代码就是决定这个类是否需要被 reload 的。

#5 楼 @ericguo 别动不动换服务器嘛 服务器和类 reload 有神马关系。。一定要搞清楚 Bug 发生的根源才可以

#7 楼 @iBachue 暂时先排除 puma 的问题嘛,你也知道 puma bug 比较多……

我也觉得先排除 puma,这是目前已知楼主用的比较不同的东西。先检查之前做了什么,贴上 Gemfile 和 config/ 下改动过的文件,而不是马上潜进去 hack。

浏览器缓存...用 Chrome 的 Incognito 模式....

#5 楼 @ericguo #8 楼 @ericguo #9 楼 @Rei 用 webrick 度过了,也一样。而且是个新项目,也出现这问题

#10 楼 @lainuo 切换了 IE && Firefox 也是同样的问题。重起服务就好了。新项目没修改配置也会这样,目前猜想可能是系统原因。

#8 楼 @ericguo #9 楼 @Rei #10 楼 @lainuo 比如修改了 PostsController 下的 create 方法,就算你把语法弄错了,然后刷新浏览器或换浏览器打开,都只运行之前的 create 方法,不显错。Coffeescript 也一样,还有项目在开发模式运行中,PostsHelper 中新增辅助方法,然后在页面刷新会出现“没有这么方法”。

建议 lz 搞清楚 rails reload 的原理,然后慢慢排错,这么猜和尝试意义不大。比如 @iBachue 提到的 ActiveSupport::FileUpdateChecker。

我也希望能知道你的问题所在。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号