2016-03-27 8 views
2

Önceden yapılmış bir OTP uygulamasını kullanması gereken bir sistem yapıyorum (X olarak adlandırın). Yeni bir OTP uygulaması/modülü oluşturmak istiyorsam, örneğin bir modülde var olan uygulamayı nasıl kullanabilirim?Mevcut bir OTP uygulamasını başka bir uygulamada veya modülde kullanabilir miyim?

Ben application davranışını izler beri, start diyebiliriz varsayılır ve bu yüzden aşağıdaki kodu vardır minimalist bir uygulama Y inşa:

y.erl:

-module(y). 
-behaviour(application). 

start(_StartType, _StartArgs) -> 
    io:format("going to call x_app~n"), 
    {ok, _} = x_app:start([]), 
    io:format("called x_app~n"), 
    y:start_link(). 

stop(_State) -> 
    ok = x_app:stop([]), 
    ok. 

İnşaat demiri bu derler kod başarıyla ve uyarı vermiyor. Hiç
rel/y/bin/y start çıkışları şey rel/y/bin/y stop çıkışları Node is not running!

cevap

3

(Ben en az birinin io:format çıktısını almak için ümit) Eğer rebar kullandığınız beri Sen application's .app resource file bir bağımlı uygulaması olarak uygulama x listelemek gerekir, ya da, x bir uygulama bağımlılık olarak listelenir çok son satırında

{application, your_app, 
[{description,"your application"}, 
    {vsn, "0.1"}, 
    {modules,[]}, 
    {registered, []}, 
    {mod,{your_app,[]}}, 
    {env, []}, 
    {applications,[kernel, stdlib, x]}]}. 

Not: en .app.src dosyada. Bu, uygulamanıza başlamadan önce x'un başlatıldığından emin olmak için Erlang uygulama denetleyicisiyle sonuçlanır. Uygulamanızı, application:ensure_all_started/1,2 aracılığıyla bir Erlang kabuğunda interaktif olarak başlatıyorsanız, bu bildirim uygulamanızın başlamasından önce x'un başlatıldığından emin olacaktır.

+0

Cevabınız için çok teşekkür ederim. Yani bu, 'x.app.src' parametresinin düzgün yapılandırılmasından sonra 'application: start (y).' Seçeneğini kullanırsam beklenen sonuçları göreceğimi ima eder. Muhtemelen x_app: start ([]). 'Satırlarını mı bırakmalıyım? – goncalotomas

+1

Doğru, uygulamayı kendi kodunuzdan gösterdiğiniz gibi başlatmamalısınız. Eğer 'y'' x'’e bağlıysa, y y.app.src'’de 'y'' i listeledim ve normal Erlang sürümü başlangıç ​​makineleri doğru sırada başlatıldığından emin olurlar. –

+0

Uygulamayı durdurmaktan ne haber? 'Application: stop (y) .' x 'yi de sonlandırıyor mu? – goncalotomas

İlgili konular