如何让Rails 3在开发模式下重新加载STI类?

切换到Rails 3后,我注意到我必须重新启动服务器才能使每个请求重新加载STI模型类。 例如,假设我有这个:

# app/models/vehicle.rb class Vehicle < ActiveRecord::Base end # app/models/car.rb class Car < Vehicle end 

如果我对Vehicle进行了更改,则会在下一个请求中加载更改。 但是,如果我对Car进行更改,我必须重启我的服务器才能加载。

有关解决这个问题的想法?

我正在运行WEBrick,但我并没有承诺。

我们发现我们需要zetetic的解决方案和一些额外的代码来完成这项工作(至少在Rails 3.0.9中)。 对于上述问题,解决方案看起来像:

在config / environments / development.rb中:

  config.after_initialize do ["vehicle"].each do|dep| require_dependency( (Rails.root + "app/models/#{dep}").to_s ) end end 

在app / controllers / application_controller.rb中:

 class ApplicationController < ActionController::Base if Rails.env == 'development' require_dependency( (Rails.root + "app/models/vehicle").to_s ) end ... 

development.rb中的代码处理类的初始加载,ApplicationController中的代码处理后续请求。

我相信这可以通过在控制器中添加require_dependency 'vehicle'来解决。

使用rails 3.0.3和3号乘客,我根本看不到这一点。 如果将您的应用更新到3.0.3无法修复它,我将离开WEBrick。

我个人建议使用WEBrick以外的东西。 乘客一直是我开发+生产的首选服务器。