我有一个发布类:
class Publish
def initialize(app_id, secret_key)
@app_id = app_id
@secret_key = secret_key
end
def publish(source_file, target_link)
# ...
end
end
并且我想要一个Publish的全局实例变量,所以我在初始化程序中做了一些事情:
Publish.class_eval do
class_attribute :instance
end
Publish.instance = Publish.new(Settings.app_id, Settings.secret_key)
所以我可以在任何地方检索该实例:
Publish.instance.publish(source_file, target_link)
但是,如果我更改发布代码,则会由于自动重新加载而抛出错误undefined method 'instance' of Publish
。
答案 0 :(得分:1)
将实例创建/分配放在to_prepare
块中。这样,它将仅在生产环境中创建一次,但是在应用程序以开发模式重新加载时都可以创建。
Rails.application.config.to_prepare do
Publish.instance = Publish.new(Settings.app_id, Settings.secret_key)
end
(我将class_attribute
移到了类定义中-但如果愿意,您也可以将其放入to_prepare
中。)