2016-06-24 6 views
3

그래서 철근 앱 구조가 있고 deps 폴더에 여러 개의 종속성이 있다고 가정하면 일부는 라이브러리 응용 프로그램이고 일부는 시작해야하는 응용 프로그램입니다. 나는 보통 이런 식으로합니다 :Erlang 응용 프로그램에서 종속성의 코드 경로를로드하는 올바른 방법은 무엇입니까?

start(_Type, _Args) -> 
    code:add_path("../deps/depapp/ebin"), 
    {ok, _} = application:ensure_all_started(depapp), 

개발 환경에서 올바른 방법입니까? 제작은 어떻습니까?

답변

1

당신이 사용한 것은 반드시 잘못된 방법은 아니지만 몇 가지 문제가 노출 될 수 있습니다. 예를 들어,이 방법을 사용하면 응용 프로그램을 시작하기 전에 시작해야하는 종속 응용 프로그램을 시작할 수 있습니다.

loading 또는 starting 종속 OTP 응용 프로그램 또는 라이브러리에 대한 다른 대안이 있습니다.

1) 사용 erl 명령 줄 플래그 :

erl -pa ebin deps/*/ebing -s your_dep_app start -s your_app start 

2)를 처리하기위한 패키지 매니저를 사용 : 당신을 위해 그것을 처리 할 수있는 패키지 관리자로 예를 철근 같이

. 필요한 것은 응용 프로그램 종속성을 rebar.config으로 지정하고 Rebar2의 경우 rebar get-deps 또는 Rebar3의 경우 rebar3 compile을 발급하는 것입니다. Rebar3에 대한 샘플 설정 파일의 코드 조각은 다음과 같은 :

{deps,[ 
    %% Packages 
    rebar, 
    {rebar,"1.0.0"}, 
    {rebar, {pkg, rebar_fork}}, % rebar app under a different pkg name 
    {rebar, "1.0.0", {pkg, rebar_fork}}, 
    %% Source Dependencies 
    {rebar, {git, "git://github.com/erlang/rebar3.git"}}, 
    {rebar, {git, "http://github.com/erlang/rebar3.git"}}]}. 

을 보강 철근 종속성 관리자에 대한 자세한 내용은 this 링크에서보세요.

또한 보강 철근을 사용하여 보강 작업을 시작하거나로드 할 때 해제를 수행하고 보강 철근이 시작하거나로드 할 수 있습니다.

{relx, [ 
    {release, 
    {your_app, "0.1.0"}, 
     [your_dep_app_1, 
     {your_dep_app_2, load}]}]}. 

이 설정로드와 your_dep_app_1을 시작하지만 단지 your_dep_app_2로드 : 샘플 철근 설정 파일의 조각은 릴리스를 만들기위한됩니다 다음. 철근 릴리즈 관리자에 대한 자세한 내용은 this 링크를 참조하십시오.