Languages/Erlang2008.07.04 12:28

yaws를 설치했다면 Erlyweb도 설치해보고 싶은 것이 인지상정일 터인데, 설치 방법이 간단하긴 하지만 그렇다고 한방에 잘 되지도 않는다. 다음과 같이 하면 큰 무리 없이 잘 될 것.

BASIC TROUBLESHOOTING : 설치시 생기는 문제들

우선, http://erlyweb.org/ 에 가서 최신 버전의 erlyweb distribution을 받는다. 그런 다음에 erlang의 lib 디렉터리 아래에다 이 파일의 압축을 푼다. 필자의 경우, /usr/lib/erlang/lib 아래에 풀어주었다. erlang library가 어디에 설치되어 있는지 모르겠다면, erl 프롬프트상에서 code:lib_dir(). 를 입력하고 리턴 키를 눌러주면 된다.

원래는 (?) 압축을 풀어주는 것 만으로 모든 것이 해결되어야 한다. 제대로 되었다면, 이제 작업 디렉터리로 가서 erl 셸을 실행한 다음에 다음과 같이 해 본다.

1> erlyweb:create_app("testapp", ".").


이렇게 하면 다음과 같은 메시지가 나오면서 해당 디렉터리 아래에 src,www, ebin 등의 디렉터리가 생성되어야 한다.

1> erlyweb:create_app("testapp", ".").
info:erlyweb_util:39: creating "./testapp"
info:erlyweb_util:39: creating "./testapp/src"
info:erlyweb_util:39: creating "./testapp/src/components"
info:erlyweb_util:39: creating "./testapp/www"
info:erlyweb_util:39: creating "./testapp/ebin"
info:erlyweb_util:70: creating "./testapp/src/components/html_container_view.et"
info:erlyweb_util:70: creating "./testapp/src/components/html_container_controller.erl"
info:erlyweb_util:70: creating "./testapp/src/mh20_app_controller.erl"
info:erlyweb_util:70: creating "./testapp/www/index.html"
info:erlyweb_util:70: creating "./testapp/www/style.css"
ok


그런데 잘 되지 않고, 간혹(?)

=ERROR REPORT==== 17-May-2007::11:43:31 ===
beam/beam_load.c(1097): Error loading module erlyweb:
  use of opcode 136; this emulator supports only up to 129


위와 유사한 오류 메시자가 뜨는 경우가 있다. 그럴 때는 erlyweb 빌드를 다시 해 주어야 한다. /usr/lib/erlang/lib/erlyweb-1.76 (필자의 경우) 로 cd 한 다음에, make clean ; make를 때려주자. 십중팔구는 그것도 잘 안될 것이다. 오류 메시지를 유심히 보면, yaws_api.hrl 파일을 찾지 못하는 것이 원인임을 알 수 있다.

그 때는 cd src/erlyweb을 일단 하자. 위의 문제를 해결하는 데는 여러 가지 우아한 다른 방법이 있을 수 있겠지만, 성질급한 사람에게 추천하는 가장 빠른 방법은, 이 디렉터리 안에서

ln -s <yaws 헤더 파일이 있는 디렉터리>/yaws_api.hrl .


를 해 주는 것이다. 필자의 경우 저 디렉터리는 yaws를 local home directory에 설치했기 때문에 /home/bjlee/packages/yaws-1.76/include 였다.

이렇게 한 다음에 다시 cd ../.. 해서 /usr/lib/erlang/lib/erlyweb-1.76 (필자의 경우) 로 간 다음에 make를 때려보면 정상적으로 컴파일이 될 것이다.

그 다음으로 남은 일은 http://www.ibm.com/developerworks/kr/library/opendw/20080617/ 여기를 참고하면 될 것이다. :-)

MORE TROUBLESHOOTING : 설치 이후

1. 컴파일 문제

그런데 만일 yaws를 띄우는건 잘 되는데 erlyweb app가 컴파일이 잘 안된다면? 특히 다음과 같은 오류 메시지를 내는 경우에는 어떻게 해야 좋을까?

3> erlyweb:compile("testapp", [{erlydb_driver, mysql}, {auto_compile, true}]).
debug:erlyweb_compile:379: Compiling Erlang file "testapp_app_controller"
error:erlyweb_compile:89: Error compiling app controller
** exited: {error,{invalid_module,"testapp/src/testapp_app_controller.erl"}} **

그럴 경우에는 yaws의 interactive command prompt 상에서 pwd().를 해 본다. 아마 testapp를 생성한 디렉터리가 아니게 되어 있을 것이다. 그럴 경우에는

4> cd("/home/bjlee/work/yaws/erlyweb/").


와 같이 해 주면 된다. 필자의 경우에는 저 디렉터리 아래에 testapp 디렉터리가 있었다.

2. MySQL 문제

erlyweb:compile을 처음으로 실행할때는 MySQL을 쓰던 mnesia를 쓰던 사실 별 상관은 없지만, 본격적으로 모델을 만들고 데이터베이스를 붙이려고 하다 보면 이제 문제가 조금씩 발생한다. 가장 크게 문제가 되는 것은 erlyweb:compile이 정상적으로 실행되려면 시스템에 MySQL이 깔려 있어야 한다는 것. (mnesia를 쓰겠다면 아무 문제 없겠지만...)

MySQL을 깔고 나서 yaws interactive shell에서 다음과 같이 해 보자. 이렇게 해 두어야 erlyweb:compile 과정에서 발생하는 문제가 사라진다. 아래의 과정은 mysql server에의 접속 정보를 확인하는 과정과 같은 것이라고 보아도 일단은 무방하다.

erlydb:start(mysql, [{hostname, "localhost"}, {username, "xxxx"}, {password, "yyyy"}, {database, "testdb"}]).

username의 "xxxx" 부분에는 데이터베이스 접근에 사용될 아이디를 적어주시고, password의 "yyyy" 부분에는 해당 사용자의 암호를 적어주시면 된다. database의 "testdb" 부분에는 mysqladmin create <데이터베이스이름> 명령으로 생성한 mysql database 이름을 적어주면 된다.

그런 다음에 erlyweb:compile을 다시 돌려보면 되는데, auto_compile을 true로 해두었다면 사실 안해주어도 무방해야 하지만, 직접 돌려보면 어떤 문제가 있는지를 직접 확인할 수도 있다.

보통 이 단계에서 발생하는 문제는, 다음과 같은 증상으로 나타난다.

** exited: {no_such_table,{{module,test},{table,test}}} **

즉, 모델에 대한 데이터베이스 테이블이 아직 만들어지지 않았다는 것. 이 문제는 mysql 상에서 테이블을 적절히 생성해서 해결해주면 된다.





 

신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Languages/Erlang2008.06.14 17:03
Erlang 웹 개발을 위해 yaws 서버 소스 파일을 다운로드 받아 설치할때는 다음과 같은 절차를 우선적으로 밟게 된다.

./configure ; make

그런데 ./configure를 실행하면 gcc에서 실행파일을 생성할 수 없다고 하는 메시지가 뜨면서 configure가 중단되는 경우가 있다.

그런 경우에는 이 글을 참고하여 gcc 문제를 먼저 해결해야 한다. 그런 다음에 다시 ./configure ; make 한다.

그런데 make를 진행하다 보면 pam_appl.h라는 헤더 파일을 찾지 못한다는 오류 메시지가 출력되면서 컴파일이 진행되지 않는 경우가 있다.

그런 경우에는 sudo apt-get install libpam0g-dev 를 실행하여 관련된 헤더 파일을 설치하여야 한다.

이상의 과정이 정상적으로 끝났다면 이제 ./configure ; make를 하면 yaws 파일이 정상적으로 생성된다.

생성된 실행 파일을 설치하는 것은 그 나중 문제인데, 사용자의 local home directory에 임시로 설치하여 사용하고자 한다면 그 상태에서 make local_install 하면 된다. 그러면 실행 파일이 사용자의 $HOME/bin에 설치되고, configuration 파일은 $HOME/yaws.conf와 같이 만들어지게 된다.

개발 단계에서는 이렇게 설치해놓고 사용하는 것이 보다 간편하다.

상기 문제는 yaws 소스를 컴파일하여 설치하려고 하는 경우에만 발생하며, sudo apt-get install yaws와 같이 해서 설치한 사용자에게는 발생하지 않는 문제이다. 다만 sudo apt-get install yaws로 설치한 사용자는 Yaws 사용자 가이드에 나온 예제들을 실행해 보기 위애서 여러 가지 설정 파일들을 이리 고치고 저리 고치는 수고를 좀 장시간 해 주어야 할 것이다.

참고한 링크들:

  1. http://marc-abramowitz.com/archives/2007/04/18/building-yaws-erlang-web-server-for-ubuntu/
  2. http://www.buggymind.com/137
  3. http://www.ibm.com/developerworks/kr/library/opendw/20080520/





신고
Posted by 이병준

소중한 의견, 감사합니다. ^^