この問題が Rails の一般的な問題なのか、Redmine 固有の問題なのかはわかりません。
クラス メソッド try_to_login を持つクラス User があります。method_alias_chain を含むモジュールを作成して、そのメソッドをラップし、追加機能を提供しました。コンソールに移動して try_to_login を呼び出すと、これは正常に機能します。私のラッパーが実行され、すべて問題ありません。ただし、これをサーバーで実行すると、バニラメソッドだけが呼び出されます。ラッパーは決して触れられません。確かにバニラメソッドにロガーコマンドを追加しましたが、実際に呼び出されています。
コードの簡略版は次のとおりです。
require_dependency 'principal'
require_dependency 'user'
require 'login_attempt_count'
module UserLoginAttemptLimiterPatch
def self.included(base)
base.extend ClassMethods
base.class_eval do
class << self
alias_method_chain :try_to_login, :attempt_limit
end
end
end
module ClassMethods
def try_to_login_with_attempt_limit(login, password)
user = try_to_login_without_attempt_limit login, password
#stuff here gets called via console but not via browser
user
end
def authentication_failed(login)
#important code here
end
end
end
User.send(:include, UserLoginAttemptLimiterPatch)
さらに、このモジュールはプラグインのロード時に必要です。