为什么Rails不会在每个请求上刷新类(尽管配置)?

mui*_*bot 14 ruby-on-rails ruby-on-rails-2

我最近每次更改代码时都开始重新启动开发服务器.我的development.rb文件仍然有这一行:

config.cache_classes = false

我尝试使用调试器验证此值是否已停留.为此,我将配置设置为environment.rb中的全局变量:

$my_initializer = Rails::Initializer.run do |config|
  ...
end

然后我debugger在我的一个控制器中放了一条线,所以我可以这样做:

(rdb:2) $my_initializer.configuration.cache_classes
false

这样就消除了将价值cache_classes设定在true其他地方的可能性.我已经尝试过使用Mongrel和WEBrick,但它仍然会发生.

还有什么可能导致Rails不能在每次请求时重新加载我的代码?

我正在运行:Mongrel 1.1.5
WEBrick 1.3.1
Rails 2.3.8
Ruby 1.8.7 p253

编辑:在@Daemin的建议下,当我将它们保存在我的文本编辑器(Textmate)中时,我检查了我的文件的mtime实际上是否正在更新

merced:controllers lance$ ls -l people_controller.rb 
-rwxr-xr-x  1 lance  staff  2153 Act 10 18:01 people_controller.rb

然后我做了一个更改并保存了文件:

merced:controllers lance$ ls -l people_controller.rb 
-rwxr-xr-x@ 1 lance  staff  2163 Oct 11 12:03 people_controller.rb

所以这不是mtimes的问题.

mui*_*bot 11

所以,事实证明,config.threadsafe!覆盖的效果config.cache_classes = false,即使它实际上并没有覆盖价值cache_classes(见我的举证问题).在Rails源代码中挖掘更多内容可能会说明为什么会这样,但我实际上并不需要在我的开发环境中使用线程安全行为.相反,我将我的调用替换为config.threadsafe!environment.rb

config.threadsafe! unless RAILS_ENV == "development"

现在一切正常.


E.E*_*.33 7

如果其他人有这个问题,解决方案就是订单:config.threadsafe!必须要来config.cache_classes.像这样重新排序以修复它:

...
config.threadsafe!
config.cache_classes = false
...
Run Code Online (Sandbox Code Playgroud)

回答来自:Rails:cache_classes => false仍然缓存


Cla*_*law 5

我怀疑您希望刷新的类在您的配置中的某个地方是"必需的".请注意,Rails的依赖加载发生在Ruby发生之后require.如果已经需要特定的模块或类,则Rails的依赖加载器不会处理它,因此不会重新加载.有关详细说明,请查看此文章:http://spacevatican.org/2008/9/28/required-or-not