2012-06-21 47 views
4

我有一個Erlang應用程序,它在另一個應用程序的deps目錄中有一個依賴項。何時使用erlang應用程序:start或included_applications和主管?

從我的理解我可以;

a)通過調用application:start(some_other_app)啓動應用程序,並顯示它在Observer中獨立運行,從我的包含應用程序啓動我的依賴應用程序。

b)將我的依賴應用程序包含在我的.app文件中,包含{included_applications,[some_other_app]},以便應用程序加載並且不啓動,然後從我自己的頂級主管啓動包含的應用程序。這再次啓動包含的應用程序,並在Observer中顯示其在我自己的監督層次結構下運行。

我的問題是我應該什麼時候使用這兩種方法?如果我使用選項「a」,並且我的依賴應用程序退出,它將被重新啓動,或者我應該使用方法「b」,以便相應地監控我擁有的任何依賴項。

在旁註中我使用鋼筋來打包和管理我的依賴關係。

謝謝,

Andy。

回答

1

在您的應用程序描述符中聲明您的依賴關係是要走的路,所以您應該在大多數情況下使用選項B.

應用程序控制器將確保在啓動應用程序之前,所有依賴項都存在並啓動(按順序),並且如果這些依賴項以錯誤終止,也會使應用程序失敗。此外,應用程序控制器將在需要時關閉所有內容。

除此之外,如果您選擇選項A,則在啓動具有application:start/1的應用程序時,您將默認獲得臨時應用程序,因此應使用application:start/2,將永久原子作爲第二個論點。

編輯:在應用程序描述符中有您的依賴關係也有助於可見性,很容易知道您的代碼沒有掃描源代碼。

+0

感謝marcelog,有助於澄清事情。我認爲應用程序控制器會確保我的依賴項被加載,並且我的頂級主管的職責是啓動我的依賴應用程序的主管,還是我可以從我的應用程序描述符執行此操作?關於應用程序的好處:start/2如果必須使用選項a),我會記住這一點。 – Vivilar

+0

@Vivilar嗨,請參閱:http://www.erlang.org/doc/man/app.html填充{applications,Apps}選項將使這些應用程序在您的應用程序之前啓動(及其縮放)。 included_applications不會啓動它們,只是加載它們。很高興能有幫助,如果有用,請不要忘記接受答案。歡呼 – marcelog

+0

是的,謝謝我沒有意識到添加到{應用程序,應用程序}的應用程序也啓動時,與reltool生成一個完整的版本。它的失敗,如果我剛剛啓動我的應用程序與應用程序:本地啓動(my_app)erlide,但可以輕鬆地寫一個函數來解決這個問題。感謝接受這個答案:-) – Vivilar

3

你可能不應該做或a)也不是B)

Learn You Some Erlang

看後面的章節:Included Applications

這是越來越多的,建議不要使用包括應用簡單的原因是:他們嚴重限制了代碼的重用。這樣想想吧。 我們花了很多時間在ppool的架構上工作,使其成爲 ,這樣任何人都可以使用它,獲得他們自己的池並可以隨意做任何他們想要的 。如果我們將它推入一個包含的應用程序中,那麼它將不能再包含在此虛擬機上的任何其他應用程序中,並且如果erlount死亡,那麼ppool將被取消,破壞 任何第三方的工作希望使用ppool的應用程序。

由於這些原因,包含的應用程序通常被排除在許多Erlang程序員的工具箱之外的 。正如我們將在下面的 一章中看到的,發佈基本上可以幫助我們以更通用的方式在 中做同樣的事情(以及更多)。

在章節Release is the Word中,您可以閱讀關於幾個應用程序如何捆綁到一個relase以及它們是如何啓動的。

0

我有一個類似的問題,你如何在erlang項目中包含依賴項,然後你如何釋放它們?

我從各種朋友和erlang郵件列表中獲得了一些幫助......並且在重新閱讀了一些文檔和更多的試驗和錯誤之後......我想出了一些東西。它的長,所以檢查出的要點:

https://gist.github.com/3728780

-Todd

相關問題