2015-02-08 49 views
0

基本上我有一個應用程序,通過Mailgun路由處理傳入的電子郵件。現在,根據我收到電子郵件的地址,Mailgun向適當的控制器操作發出了發佈請求,並且基本上取決於它是哪個操作,名爲department_id的字段需要分配給正確的部門,以便該部門的人員接收該電子郵件。在rails應用程序中設置設置,而不在db上存儲值。

現在我知道如何手動執行此操作,並且其工作正常,但我想創建一種「設置屏幕」,並選擇每個操作被調用時應選擇哪個部門。現在我知道我可以創建一個數據庫表並處理這個問題,但是有沒有辦法在不創建完整的單獨表的情況下實現這一點?

謝謝!

+0

您將需要將設置存儲在持久的地方。你爲什麼認爲數據庫不是這個最好的存儲? – spickermann 2015-02-08 00:43:51

+0

這是一個很難改變的設置。此外,我們的ap db正在快速增長,目前在19 +桌子(在管理訂單,商店,門票,時間跟蹤等內部管理員應用程序中)... – meritonch 2015-02-08 00:46:56

+0

如果它很少發生變化,您想要在源代碼中對其進行硬編碼,您可以將其存儲在源代碼中的配置文件中,也可以將其存儲爲包含動作到部門映射的yaml文件。當然,你也可以在動作本身中硬編碼。要更改它,您必須更改源代碼中的配置文件中的設置並重新部署您的應用。這可能適合您的應用程序。我認爲這些是你的兩個選擇,在源代碼(可能是一個配置文件)或數據庫中進行硬編碼。 – jrochkind 2015-02-08 16:22:27

回答

0

在理論上可以保存在內存中的數據,但這是一個壞主意,這主要是因爲:

  1. 除非你正在運行一個單一的服務器進程有一個線程,您的應用程序服務器將有不同的數據副本。這些進程將無法保持這些副本的同步,並且您將無法同時更新它們。
  2. 它不一致。拋開進程間同步,您只需要一個具有不同數據的服務器進程來使您的應用邏輯不一致。
  3. 當應用程序重新啓動或崩潰時,您將丟失所有修改。

這正是我們使用DB和其他外部數據支持(redis,memcached,文件等)來存儲由不同進程共享的數據的原因。

可接受的解決方案是將這種數據添加到您的應用程序的源,例如,在Rails初始化器中。但是,當您嘗試在運行時更改它時,您將遇到上述問題。