Как установить переменные уровня класса в инициализаторе Rails при использовании Spring?
В моем config/initializers/action_logger.rb у меня есть следующий код
# config/initializers/transaction_logger.rb
Transaction::Logger.logger = Transaction::Logger.new("log/transations.log")
Каждый раз, когда я меняю код и запускаю тесты, я получаю:
Failure/Error: delegate :info, :warn, :debug, :error, to: :logger
Module::DelegationError:
#<Class:Transaction::Logger>#error delegated to logger.error, but logger is nil: Transaction::Logger
я должен бежать spring stop
и затем снова запустите тест (кажется, что код инициализатора выполняется после spring stop
)
Как я должен установить Transaction::Logger.logger
чтобы избежать этой проблемы? Спасибо
1 ответ
Решение
Как говорится в весенней документации
Поэтому, чтобы избежать этой проблемы, не сохраняйте ссылки на константы приложения в вашем коде инициализации.
Кажется, это также может быть связано с настройкой переменных класса
Я перешел настройку Transaction::Logger.logger
в Transaction::Logger
файл
# app/core/transaction/logger.rb
class Transaction::Logger < Logger
...
end
Transaction::Logger.logger = Transaction::Logger.new("log/transactions.log")