我正在使用configatron gem获取由ActiveRecord备份的新Rails应用程序。我的一些configatron设置设置在一个文件中,一些是从DB中提取的,因为它们会不时地改变,这里有几行来自我的configatron.rb
configatron.app.uptime.start = Time.now
configatron.email.signature = Setting.where(:keyname => "email_signature").first.value.to_s unless Setting.where(:keyname => "email_signature").first.nil?
由于此应用程序从多个邮件程序发送多封电子邮件 - 这是将此全局配置保存在一个位置的好方法,此外它还减少了用于签名的数据库查找。如果由于某种原因,网站管理员决定更改它 - 他们可以通过Web管理界面来更新我的设置表(与设置模型相关联)。
这一切都很快乐。好,但是什么是存放configatron.rb的最佳地方?现在它位于我的初始化文件夹中。这意味着它将在应用程序启动时加载一次 - 这很好,但如果其中一个设置发生变化 - 网站管理员决定调整电子邮件签名以提及新的促销网站 - 为了使更改生效 - 我需要重新启动应用程序(运行乘客 - 因此从代码中执行touch tmp/restart.txt
非常简单)。但是,这意味着我不会重置的其他configatron设置(例如我的正常运行时间开始时间戳)也将被重置。
那么什么是移动我的configatron.rb和加载的更好的地方,以便它允许 在启动时加载一次,然后在没有和app重启的情况下更改一些配置?
感谢。
答案 0 :(得分:1)
我认为把它放在初始化器中是存放它的正确位置。
如果要在不重新启动应用程序的情况下更新配置,通常会设置“看门狗”。一些流程,它会定期提取数据库以检查配置更新。您还可以实现某种回调,将更改的配置推送到您的应用程序。
答案 1 :(得分:1)
当我把configatron放到初始化器时,Rails环境变量在加载configatron设置之前加载。因此,在Rails配置(config / environments / production.rb)中加载的中间件无法使用configatron变量。
所以我最终将它作为环境中的第一件事加载而不是