Как установить переменные уровня класса в инициализаторе 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")
Другие вопросы по тегам