2009-12-23 4 views
0

우리의 응용 프로그램은 ActiveScaffold와 함께 Rails 2.3.5를 사용하여 개발되었습니다. ActiveScaffold 그냥 컨트롤러에서 다음과 같은 선언에 의해 실행시에 마법이 꽤 추가하기 : ActiveScaffold 및 Lockdown 플러그인이있는 레일

class SomeController < ApplicationController 
active_scaffold :model 
end 

그냥 컨트롤러에서 그 한 줄을 추가하여, 모든 편안한 조치 및 해당 뷰 인해 ActiveScaffold의로 사용할 수 있습니다

메타 프로그래밍. 대부분의 코드는 런타임에 추가되므로 개발 모드 요청에는 class_caching이 없으므로 약간 느린 것으로 보입니다.

인증 레이어를 추가해야하고 팀에서 모든 인증 규칙을 선언 한 init.rb 파일을 구문 분석하는 잠금 플러그인을 선택했습니다. Lockdown이 인증 규칙을 저장하는 방법은 init.rb 파일을 구문 분석하고 init.rb 파일에 선언 된 컨트롤러를 평가하는 것입니다. 따라서 모든 요청에 ​​대해 Lockdown은 모든 컨트롤러를 평가하여 ActiveScaffold에 많은 메타 프로그래밍을 추가하도록 강제합니다. 그러면 db 쿼리가 모든 모델의 열 정의를 찾습니다. class_caching이 없으므로 개발 요청이 상당히 느려집니다. 어떤 때는 요청하는 데 거의 30-45 초가 걸립니다.

before_filter에서 ActiveScaffold의 마법을 강제로 수행 할 수있는 방법이 있습니까? 다음과 같은 뭔가 :

class SomeController < ApplicationController 
before_filter :init_active_scaffold 
private 
    def init_active_scaffold 
    self.class_eval do 
     active_scaffold :model 
    end 
    end 
end 

class SomeController < ApplicationController 
before_filter :init_active_scaffold 
private 
    def init_active_scaffold 
    self.instance_eval do 
     active_scaffold :model 
    end 
    end 
end 

class SomeController < ApplicationController 
before_filter :init_active_scaffold 
private 
    def init_active_scaffold 
    self.class.class_eval do 
     active_scaffold :model 
    end 
    end 
end 

class SomeController < ApplicationController 
before_filter :init_active_scaffold 
private 
    def init_active_scaffold 
    self.class.instance_eval do 
     active_scaffold :model 
    end 
    end 
end 

내가 모든 위의 네 가지 옵션을 시도 내가 요청을 할 때, 브라우저가 보인다 선적 표시기를 보여라. 아무 일도 일어나지 않는다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

0

잠금은 응용 프로그램을 다시 시작하지 않고 변경을 수행 할 수 있도록 개발 모드에서 init.rb 만 다시 표시합니다. 그것은 더 느릴 것이다 - 편리함은 상쇄된다. 좋은 소식은 Lockdown이 프로덕션 모드에서이 구문 분석을 한 번 수행한다는 것입니다.

저는 ActiveScaffold를 사용하지 않으므로 도움을 드릴 수는 없지만 도움이 될 것이라고 생각합니다.

+0

stonean : 개발과 제작에서 잠금 기능을 사용할 때의 성능 차이를 이해합니다. 하지만 앞서 설명한 것처럼 activescaffold와 함께 lockdown을 사용할 때의 문제점은 개발 모드에서 거의 15-30 초가 걸리기 때문에 필자는 before 필터를 사용하여 activescaffold 작업을하는 방법이 있는지 알고 싶습니다. – Dharam