[英]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.