2011-01-05 2 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에서

: 위의 문제에 대한 솔루션은 같을 것입니다

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에는 몇 가지 단점이 있지만 해결 방법이 필요합니다. – zetetic

0

레일 3.0.3과 승객 3을 사용하면 전혀 볼 수 없습니다. 3.0.3으로 앱을 업데이트해도 문제가 해결되지 않으면 WEBrick으로 옮겨 가겠습니다.

필자는 개인적으로 WEBrick 이외의 것을 사용하는 것이 좋습니다. 여객은 발달 + 생산을위한 선택의 나의 서버 지금 확실히이다.

+0

확실히 서버와 관련이 없습니다 ... 유니콘과 얇은 곳 ... 레일 3.0.9 비슷한 문제 ... – todd