使用 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")
在我的 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")