1

Rails 4.0.4 アプリでレコードを認証するためにSorcery gem (バージョン 0.8.6) を使用しています。Company

認証フローは正常に機能していますが、Sorcery のサブモジュールを使用しようとすると問題が発生します -:reset_passwordおよび:user_activation. Railsは、レコード ( )undefined methodのインスタンスで Sorcery サブモジュールで定義されたインスタンス メソッドを呼び出すときに例外をスローします。Company@company

未定義のメソッド例外

問題は断続的に発生し、論理的な方法で再現できません。1% の@company確率でメソッドが想定どおりに処理され、残りの 99% の確率では処理されません。

上の画面では、 reset_password.rbdeliver_reset_password_instructions!で定義されているを呼び出そうとしました。

My Sorcery 初期化子 ( config/initializers/sorcery.rb) にはRails.application.config.sorcery.submodules = [:reset_password, :user_activation]、 とが含まれていますconfig.user_class = "Company"

My Company モデル ( app/models/company.rb) には が含まれてauthenticates_with_sorcery!います。私が正しければ、これらのサブモジュールを含め、構成サブモジュールで定義されたメソッドでモデルを拡張する必要があります。

同じ動作がuser_activation.rbsend_activation_success_email!で定義されている他のすべてのインスタンス メソッドで発生していることに言及する価値があります(直接呼び出しているわけではありませんが、Sorcery は会社の作成が成功したときに 1% の時間しか呼び出しません)。

これに約2日間苦労しており、アイデアが不足しています。

どんな助けでも大歓迎です!

アップデート

  1. @companyコンピューターを離れて数時間後に戻った後、初めて動作するように見える (サブモジュールで定義されたインスタンス メソッドに応答する) ことに気付きました。Railsサーバーが再起動されるまで動作し続けます。
4

1 に答える 1

2

問題が見つかりました!

見つけた!1.5日後。

私のrails_adminイニシャライザには、次の行がありました。

Rails.application.eager_load!
config.included_models = ActiveRecord::Base.descendants.map!(&:name)

説明されている問題に対処するには: sferik/rails_admin#1697

これはどうやらソーサリーとは相性が悪いようです。

今はすべて順調です。

詳細: GitHub の問題

于 2014-08-08T10:20:10.210 に答える