Rails在开发环境中重置Singleton对象

时间:2018-08-07 08:39:15

标签: ruby-on-rails

我从另一台服务器获取数据库凭证和其他密钥,要求是不要将它们存储在任何地方,甚至不存储在System Vars中。 所以我创建了这个Singleton类:

class ConfigData
  include Singleton
  attr_accessor :configs
end

然后在我的环境初始化程序中,我连接到另一台服务器,并将数据填充到Singleton object中:

Rails.application.configure do
  config.before_configuration do
    # Connect to the other server
    response = RestClient.get('https://server.com/data')
    # Getting the Singleton object
    config_data = ConfigData.instance
    config_data.configs = response.body
  end
end

现在在我的数据库配置中,我使用它:

development_default: &development_default
  <<: *default
  host: db.example.com
  username: <%= ConfigData.instance.configs[:DB_USERNAME] %>
  password: <%= ConfigData.instance.configs[:DB_PASSWORD] %>

它可以正常工作,但是一旦我更改了modelcontroller之类的内容,Singleton object便会重置并丢失所有数据,因此应用程序停止了,我必须重新启动服务器。奇怪的是,如果我更改了view,则什么也没有发生,并且我可以正常使用服务器。

rails console不仅会在服务器上发生这种情况。

Rails版本:5.2.0

Ruby版本:2.4.2

0 个答案:

没有答案