2010-03-24 107 views
4

我在配置文件中有一些配置數據,當應用程序啓動時我從磁盤中讀取數據。我需要將該配置數據提供給應用程序中的其他功能/模塊。我開始研究ets/mnesia以便在啓動時存儲數據,以便在所有進程之間共享數據,但接下來我內心的聲音告誡我必須有一種更實用的erlang-y方式來執行此操作。到目前爲止,我提出的唯一替代方法是建立一個模塊,該模塊具有一個在啓動時讀取數據並響應諸如{Key,From}之類的消息並由From發出響應的actor循環。 {OK,值}。於是,我放棄了,決定問... 謝謝, --tim在模塊之間共享[config]數據,功能

回答

4

如果你需要的只是一些配置參數,你可能要包括他們作爲環境變量(二郎計算)之一你的Erlang應用程序。做到這一點的方法是將其包含到。應用程序(或.app.src)您的應用程序的文件,在env元組:

喜歡的東西:

{application, ch_app, 
[{description, "Channel allocator"}, 
    {vsn, "1"}, 
    {modules, [ch_app, ch_sup, ch3]}, 
    {registered, [ch3]}, 
    {applications, [kernel, stdlib, sasl]}, 
    {mod, {ch_app,[]}}, 
    {env, [{file, "/usr/local/log"}]} 
]}. 

來源:http://www.erlang.org/doc/design_principles/applications.html

正如你所看到的,file是配置變量。 您可以通過訪問該變量:

application:get_env(ch_app, file). 

如果你需要的是更復雜的東西,你可能希望創建一個gen_server進程,回答所有的配置請求(getter和setter方法)。

+0

輝煌,感謝羅伯託,我現在有一個簡單的gen_server現在回答我的配置調用感謝一個簡單的教程[1],它足夠簡化,甚至我可以明白... [1] - http:/ /20bits.com/articles/erlang-a-generic-server-tutorial/ – Tim 2010-03-24 16:45:32

0

更不用說任何簡單的自行編寫的解決方案都需要在啓動主管理員之前讀取配置文件,因爲您可能需要這些變量。只是一個想法,但我在自己的代碼中遇到了同樣的問題。