簡體   English   中英

如何讓Rails 3在開發模式下重新加載STI類?

[英]How to make Rails 3 reload STI classes in development mode?

切換到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以外的東西。 乘客一直是我開發+生產的首選服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM