我从另一台服务器获取数据库凭证和其他密钥,要求是不要将它们存储在任何地方,甚至不存储在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] %>
它可以正常工作,但是一旦我更改了model
或controller
之类的内容,Singleton object
便会重置并丢失所有数据,因此应用程序停止了,我必须重新启动服务器。奇怪的是,如果我更改了view
,则什么也没有发生,并且我可以正常使用服务器。
rails console
不仅会在服务器上发生这种情况。
Rails版本:5.2.0
Ruby版本:2.4.2