使用 spring 时如何在 Rails 初始值设定项中设置 class 级变量?

How to set class level variables in Rails initializer when using spring?

在我的 config/initializers/transaction_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来避免这个问题?谢谢

作为 spring 文档 says

So to avoid this problem, don't save off references to application constants in your initialization code.

这似乎也与设置 class 变量有关

我已将设置 Transaction::Logger.logger 移至 Transaction::Logger 文件

# app/core/transaction/logger.rb
class Transaction::Logger < Logger
...
end

Transaction::Logger.logger = Transaction::Logger.new("log/transactions.log")