我正在将Rails 3.2应用程序升级到版本5.我正在做的第一件事是升级到版本4并使所有测试仍在通过。
我注意到的一件事是我的应用程序现在在开发模式下非常慢。有些请求需要花费1500毫秒,因为他们过去需要花费不到50毫秒的3.2。
经过一些调试后,我发现如果我在版本4中启用cache_classes配置,我将获得与我在3.2版中禁用cache_classes时相似的性能。
Rails 4.2.9(config.cache_classes = false)
(previous render messages intentionally removed )
Rendered application/_row.html.erb (91.2ms)
Rendered application/_row.html.erb (104.1ms)
Rendered application/_row.html.erb (103.9ms)
Completed 200 OK in 1617ms (Views: 1599.0ms | ActiveRecord: 8.3ms)
Rails 4.2.9(config.cache_classes = true)
(previous render messages intentionally removed )
Rendered application/_row.html.erb (2.3ms)
Rendered application/_row.html.erb (2.5ms)
Rendered application/_row.html.erb (2.0ms)
Completed 200 OK in 59ms (Views: 41.8ms | ActiveRecord: 7.7ms
从我能够检查的,当config.cache_classes = false时,Rails不再缓存部分和类。甚至不像以前那样在3.2中使用相同的请求。
我还检查了config.reload_classes_only_on_change,这似乎是相关的,并且设置为true。
是否有其他东西我应该检查/更改以获得类似于我曾经在3.2中禁用cache_classes的那个?或者它是Rails中的回归无法修复?
不幸的是,启用cache_classes开发是不可行的。
注1:我创建了一个空的rails 4.2.9,并且能够通过创建大量的partials和启用/禁用cache_classes来重现这个问题。
注2:Rails 5中似乎也出现了同样的问题。我专注于Rails 4,因为那是我现在正在工作的那个。