2011-01-05 8 views
3

Rails 3に切り替えた後、STIモデル・クラスをリクエストごとに再ロードするためにサーバーを再起動する必要があることに気付きました。例えば、私はこれがあるとします。私はVehicleに変更を加えた場合Rails 3で開発モードでSTIクラスをリロードする方法は?

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

# app/models/car.rb 
class Car < Vehicle 
end 

は、変更は次の要求にロードされています。しかし、私がCarに変更を加えたら、サーバーを再起動してロードする必要があります。

これを修正するためのアイデアはありますか?

私はWEBrickを実行していますが、私はそれに専念していません。

答えて

2

この作業を行うためには、zeteticのソリューションといくつかの追加コードが必要であることがわかりました(少なくともRails 3.0.9では)。設定/環境/ development.rbで

:上記の問題について、解決策は次のようになり

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

コード:アプリ/コントローラ/ application_controller.rbで

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

development.rbでは、クラスの初期ローディングを処理し、ApplicationControllerのコードは後続のリクエストを処理します。

1

これはコントローラにrequire_dependency 'vehicle'を追加することで解決できると思います。

+0

私はrequire_dependencyがプライベートAPIの一部だと考えています。また、STIとオートローディングが理論的にサポートされているので、これは必要ではないと思われます。私はそこには、グローバルな設定や開発サーバーの修正を含むいくつかのソリューションがあると思っています。 – rlkw1024

+0

私はそれが必要ではないはずだと同意するが、そうである。 STIには回避策が必要ないくつかの欠点があります。これもその1つです。 – zetetic

0

レール3.0.3とパッセンジャー3を使用しても、これはまったく表示されません。あなたのアプリを3.0.3にアップデートしてもそれが修正されないのであれば、私はWEBrickに移行するだろう。

とにかく私は個人的にWEBrick以外のものを使用することをおすすめします。パッセンジャーはかなり長い間開発+生産のために私の選択のサーバーでした。

+0

明らかにサーバー関連ではありません...ユニコーンと薄いところ...レール3.0.9同様の問題... – todd

関連する問題