2011-01-05 46 views
3

切换到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,但我没有承诺它。

回答

2

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

在配置/环境/ development.rb:

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

在应用程序/控制器/ application_controller.rb:

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

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

1

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

+0

我认为require_dependency是私有API的一部分。另外,在我看来,这不应该是必要的,因为STI和自动加载在理论上是支持开箱的。我希望有一些解决方案涉及全局配置或修复我的开发服务器。 – rlkw1024 2011-01-11 04:07:24

+0

我同意它不应该是必要的,但它是。性病有一些需要解决方法的怪癖 - 这是其中之一。 – zetetic 2011-01-11 07:09:35

0

使用导轨3.0.3和乘客3,我没有看到这一点。如果将您的应用程序更新为3.0.3并不能解决问题,我就会离开WEBrick。

我个人推荐使用WEBrick以外的东西。 Passenger一直是我开发+生产的首选服务器。

+0

绝对不是服务器相关的...独角兽和薄这里...导轨3.0.9相似的问题... – todd 2011-07-07 02:15:44

相关问题