1

我正在使用configatron gem作爲由ActiveRecord備份的新Rails應用程序。我的一些configatron設置在文件中設置,有些是從DB拉,因爲他們會改變不時地,這裏有幾行從我configatron.rb在Rails應用程序中存儲Configtron配置的權利/最佳位置是什麼?

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? 

因爲這個應用程序發送多封電子郵件來自多個郵件程序 - 這是將此全局配置保存在一個地方的好方法,此外還可以減少數據庫查找的簽名。如果由於某種原因,網站管理員決定更改它 - 他們可以通過網絡管理界面進行更新我的設置表(綁定到設置模式)。

這是所有快活的&不錯,但是什麼是存儲configatron.rb的最佳地方?現在它坐在我的初始化文件夾中。這意味着它將在應用程序啓動時加載一次 - 這很好,但如果其中一個設置發生變化 - 網站管理員決定調整電子郵件簽名以提及新的促銷網站 - 爲了使更改生效 - 我需要重新啓動應用程序(運行乘客 - 因此從代碼中執行touch tmp/restart.txt很簡單)。但是,這意味着我不會重置的其他configtron設置(例如我的正常運行時間開始時間戳)也將被重置。

那麼什麼是更好的地方來移動我的configtron.rb和負載,以便它允許在啓動時加載一次 ,然後更改一些配置而無需和應用程序重新啓動?

謝謝。

回答

1

我認爲把它放在初始化器中是存儲它的正確位置。

如果您想在不重新啓動應用程序的情況下更新配置,您通常會設置一個「看門狗」。某些過程會定期拉取數據庫以檢查配置更新。您還可以實施某種回調,將更改的配置推送到您的應用。

1

當我把configtron放入初始化程序時,Rails環境變量在加載configtron設置之前加載。作爲效果,在Rails配置(config/environments/production.rb)中加載的中間件無法使用configtron變量。

,所以我結束了在environment.rb中加載它的第一件事,而不是實際上期望的行爲對我來說

+0

,我只能存儲應用程序設置那裏,需要的環境是加載後纔會被載入。實際上基於哪個環境應用程序(prod vs test/dev),我加載了不同的設置。 – konung

相關問題