1

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

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

Javascript 和 Sass 文件不会被缓存,但视图、控制器和其他 ruby​​ 代码会被缓存。我检查了 development.rb 文件并将以下缓存设置设置为 false。

config.cache_classes = false

此外,在启动服务器时,它以开发模式启动,如控制台日志中所示

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

不知道发生了什么,但我确实更改了系统的时区和时间以进行测试,并将时间恢复为实际时间。

在以正确的时间和时区重新启动我的机器后,我什至将 repo 再次克隆到我的系统上,但仍然存在问题。有谁知道每次在开发模式下发出请求时如何解决这个问题或如何强制重新加载所有 ruby​​ 代码?

4

1 回答 1

1

如果您最近还从旧版 Rails 升级。如果是这种情况,请注意Rails 3lib中没有自动加载。您正在谈论仍应自动加载但不会自动加载的辅助模块和控制器。您可以按照此答案中的说明将其更改为自动加载,添加另一个自动加载的目录,或将这些类移动到现有的自动加载目录(例如,如果合适的话)。libapp/models

如果您在其中配置了一些东西,config.autoload_once_paths那么重新加载它们可能会出现问题,否则应该按照指南的每个请求重新加载它们(如果您对发生的事情感到好奇,可以查看此处的代码)。

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

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

最后,确保自动加载目录下的类与它们所在的模块相对应。例如,如果您希望它能够正确地自动加载和重新加载,则Foo::BarsController可以在app\controllers\foo\bars_controller.rb但不在。app\controllers\bars_controller.rb

于 2013-06-25T15:13:57.517 回答