2011-02-11 3 views
2

보석/플러그인이 설치된 상태에서 glassfish에 Jruby Rails 애플리케이션을 acts_as_audited으로 배포하고 있습니다.ActionController :: base : class-warbler에 대한 정의되지 않은 메소드 cache_sweeper

내 모델을 감사하려고 할 때마다 다음 오류가 발생합니다.

내 환경은 다음과 같습니다, JRuby를 1.6.0.RC2 레일 3.0.3

너희들이 http://www.ruby-forum.com/topic/1053934

이 저를 도와주세요, 내가 붙어 오류에 대한 자세한 내용을보고 싶다면 여기를 참조 할 수 있습니다

여기

Application Error 
org.jruby.rack.RackInitializationException: undefined method `cache_sweeper' for ActionController::Base:Class 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/acts_as_audited-2.0.0.rc6/lib/acts_as_audited.rb:44:in `class_eval' 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/acts_as_audited-2.0.0.rc6/lib/acts_as_audited.rb:44 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/acts_as_audited-2.0.0.rc6/lib/acts_as_audited.rb:68:in `require' 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require' 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each' 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `require' 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each' 
    from /home/dev2/glassfishv3/glassfish/domains/domain1/applications/gavel/WEB-INF/gems/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require' 
    ... 20 levels... 

답변

1

이 문제는 jruby-rack에 a bug으로보고되었습니다.

해결 방법은 config/boot.rb에서 require 'rubygems' 다음에 require 'active_record' if defined? $servlet_context을 추가하거나 application.rb ActionController::Base.send(:include, ActionController::Caching::Sweeping) if defined? $servlet_context에서 수동으로 제거하는 것을 포함하는 것입니다.

1

나는이 문제를 인식한다고 생각합니다. acts_as_audited가 캐시 스위퍼를 사용하는 것 같습니다. 캐시 스위퍼에이 문제가있었습니다. 당신이 필요로하는

명시 적으로와 ApplicationController에 캐싱 모듈을 포함합니다 :

class ApplicationController < ActionController::Base 

    # JRuby not finding cache sweeper at runtime in production 
    include ActionController::Caching::Sweeping if defined?(JRUBY_VERSION) 

    # Rest of your class here... 

end 

이런 이유를 잘 모르겠어요,하지만 그것은 아마 생산을위한 스레드 모드에서 실행에 관련된 로딩/확인 문제입니다.

+0

업데이트 : 나는 스위퍼가 스레드 안전하지 않다는 제안을 한 다음 Rails Lighthouse 티켓을 발견했습니다. 다른 문제가 발생할 수 있습니다. 그러나 해결 방법이 있습니다. https://rails.lighthouseapp.com/projects/8994/tickets/3457-actioncontrollercachingsweeper-controller-instance-is-not-thread-safe – Scott

+0

안녕하세요. Scott, 답변 해 주셔서 감사합니다. 나는 그것을하기 전에 해봤 다. 그러나 그것은 나를 위해 일하지 않았다. 같은 오류가 반복됩니다. – kill007

+0

아, 친구. 유감입니다. 나는 지금 모든 아이디어가 없다. – Scott