Rails在Mac OS X Mountain Lion上升级到Ruby 2.0后缓存我的代码

时间:2013-06-18 18:17:44

标签: ruby-on-rails ruby caching ruby-on-rails-3.2 code-caching

Rails 3.2.13在Mac OS X Mountain Lion 10.8.4上从Ruby 1.8.7升级到Ruby 2.0后,在开发模式下缓存我的助手模块,控制器和其他ruby代码

每次重新启动服务器后,即使在rails控制台中,代码更改也会被选中。重装!控制台中的命令也不起作用,并且在我再次重新启动rails控制台之前不会重新加载我的代码更改。

Javascript和Sass文件不是缓存的,而是Views,Controller和其他ruby代码。我检查了development.rb文件,并将以下缓存设置设置为false。

config.cache_classes = false

同样,当启动服务器时,它将以开发模式启动,如控制台日志中所示

Rails 3.2.13 application starting in development on http://0.0.0.0:3000

不确定发生了什么,但我确实更改了系统的时区和时间以进行测试,并将时间还原到实际时间。

我甚至git在使用正确的时间和时区重新启动我的机器后再次将repo克隆到我的系统上并且仍然存在问题。有没有人知道如何修复此问题或如何在开发模式下每次请求时强制重新加载所有ruby代码?

1 个答案:

答案 0 :(得分:1)

如果您最近也从较旧的Rails版本升级了。如果是这种情况,请注意libnot autoloaded in Rails 3。您正在谈论应该仍然自动加载的辅助模块和控制器,但lib不会。您可以将其更改为noted in this answer自动加载,添加另一个自动加载的目录,或将这些类移动到现有的自动加载目录(例如app/models,如果合适的话)。

如果您在config.autoload_once_paths中配置了内容,那么重新加载这些内容可能会出现问题,否则应根据guide按请求重新加载这些内容(您可以查看代码here如果你对正在发生的事情感到好奇的话。)

另外,请检查以确保您确实在开发模式下运行,并注意您无法根据answer在development.rb中将{lib}添加到config.eager_load_paths

如果您对代码有时间问题,也许当您重新克隆回购时,您仍然会在文件上收到错误的日期。尝试执行:find /path/to/rails/app -exec touch {} \;更新文件mod日期时间。 (另外,您可能希望确保您的数据库中的created_at / updated_at中的日期时间正常。希望这不是问题,因为这可能是一团糟。)

最后,请确保自动加载目录下的类与它们所在的模块相对应。例如Foo::BarsController可能在app\controllers\foo\bars_controller.rb但在app\controllers\bars_controller.rb中可能不在{{1}}它可以自动加载并正确重新加载。