2

acts_as_audited宝石/プラグインがインストールされているGlassfishにJruby Railsアプリケーションをデプロイしています。

モデルを監査しようとすると、次のエラーが発生します。

私の環境は次のとおりです: Jruby 1.6.0.RC2、Rails 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...
4

2 に答える 2

1

私はこの問題を認識していると思います。act_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

なぜこれが起こるのかはわかりませんが、おそらく本番用のスレッドセーフ モードでの実行に関連する読み込み/解決の問題です。

于 2011-02-14T11:35:13.100 に答える
1

この問題は jruby-rackのバグとして報告しました。

回避策は、 config/boot.rbにrequire 'active_record' if defined? $servlet_contextafterを追加するか、手動で application.rb のどこかにスイープを含めることです。require 'rubygems'ActionController::Base.send(:include, ActionController::Caching::Sweeping) if defined? $servlet_context

于 2011-06-28T14:07:15.623 に答える