2011-08-11 4 views
5

에서 응용 프로그램을 시작, 나는처럼 보이는 서버를 시작하는 스크립트가 다음얼랑 생산

#!/bin/sh 
PWD="$(pwd)" 
NAME="$(basename $PWD)" 
erl -pa "$PWD/ebin" deps/*/ebin -boot start_sasl \ 
    -name [email protected] \ 
    -s reloader \ 
    -s $NAME \ 
    -setcookie some_random_cookie \ 
    +K true \ 
    +P 65536 

이 얼랭 셸을 열고하라는 메시지를 표시하고 거기에서 I

application:start(myapp)

이 개발 목적으로 괜찮지 만, 어떻게 생산이 배포하는 : 같은 것을 입력합니다? 현재로서는이 작업을 수행하는 유일한 방법은 화면 프로세스를 시작하고 화면 프로세스를 분리하는 것입니다. 나는 그것이 사실이라고 생각하지 않는다. 그게 도움이된다면 철근을 사용하고 있습니다.

답변

6

사용자 지정 부팅 스크립트를 사용하려는 것 같습니다. 부트 스크립트는 erlang 시스템에 무엇을 시작할 지 알려줍니다.

-boot start_sasl 

http://www.erlang.org/doc/system_principles/system_principles.html, 더 쉬운 옵션은 응용 프로그램을 변환 할 수 있습니다 절 "사용자 정의 부팅 스크립트"

을 찾아 : 당신이 사용하고있는 스크립트, 당신은 함께 부트 스크립트를 설정하는 보강 철근을 사용하려면 https://github.com/basho/rebar. 그런 다음 다음을 수행 할 수있을 것입니다 :

./rebar compile generate 

이 허용하는 응용 프로그램에 대한 자료를 만들 것이다 당신에게 다음 : 단지 모두 쉽게 사용할 수 싸서

./rel/<app_name>/bin/<app_name> 

같은 원리.

+2

그는 이미 철근이 사용되고 있음을 언급합니다.rebar reltool.config를 작성하는 방법을 설명하면 대답이 훨씬 더 쉬울 것입니다. –

-7

글쎄, 아파치 (see here)에 연결하거나, 화면 세션만큼 해킹되지 않는 간단한 해결책 인 nohup을 사용할 수 있습니다. 프로덕션 서버에서이를 실제로 구현하고 Apache 경로를 사용하지 않으려면 init script을 고려해보십시오.

+0

아파치는 여기서 무엇을해야합니까? My Erlang 노드는 웹 서버를 실행하지 않습니다. – randombits

+0

아, 스크립트에 제공 한 정보를 기반으로 웹 서버로 작동한다고 가정했지만 다른 웹 서버와도 상호 작용할 수 있다고 생각합니다. 이 경우 아파치는별로 도움이되지 않는다.)'nohup'은 여전히 ​​좋은 해결책이지만,'-detached' 옵션을 사용하는 것이 좋습니다. – stefan

+0

-1. 혼란스러운 대답. Apache는 아무 관계가 없으며 분리 된 erlang 노드에는 nohup이 필요하지 않습니다. –

5

-detached을 추가하십시오. documentation은 이것을 다음과 같이 요약합니다 :

시스템 콘솔에서 분리 된 Erlang 런타임 시스템을 시작합니다. 데몬 및 백그라운드 프로세스를 실행하는 데 유용합니다.

일단 그렇게하면 -s 매개 변수로 시작할 수 있습니다. $NAME = myapp이라고 가정하면, init은 myapp:start/0을 호출하려고 시도합니다 (원하는 경우 사용자 정의 할 수 있습니다). 이 함수는 application:start(myapp)으로 끝납니다.

모든 퍼즐 조각을 제 위치에서 얻을 수 있다면 작업 스크립트가 있어야합니다.