Я не уверен, является ли эта проблема общей проблемой Rails или специфичной для Redmine.
Существует класс User, у которого есть метод класса try_to_login.Я написал модуль, содержащий method_alias_chain, чтобы обернуть этот метод и обеспечить дополнительную функциональность.Это работает нормально, если я иду в консоль и вызываю try_to_login.Моя обертка будет выполнена и все в порядке.Однако, когда я запускаю это на сервере, вызывается только метод vanilla.Обертка никогда не трогается.Я добавил команду logger в метод vanilla, чтобы быть уверенным, что он на самом деле вызывается.
Вот упрощенная версия кода:
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)
Кроме того, этот модуль требуетсякогда плагин загружен.