본문 바로가기

Ruby on Rails

Ubuntu desktop 7.04 amd64 와 Ruby, Rails 설치기

일단, 64비트 버전을 깔아보기로 했다
뭐 안돌아가는게 있으면 32비트 버전으로 다시 깔면되겠지

서버 버전은 지난번에도 깔았다가 너무 썰렁해서 다시 데스크탑버전으로 깔았는데 이번엔 정말 서버로 쓸것이니 만큼 서버 버전을 깔아본다.

설치했더니 SSH가 안깔려 있어서 sudo apt-get install openssh-server로 설치를 하려고 하니 웬 에러가 나면서 정지하는데 한글인듯한 글씨들이 죄다 깨져서 무슨말인지도 잘 모르겠다.

일단 한글이 제대로 나오도록 해본다. 폰트가 없는 듯하여 폰트를 설치하기로 함

폰트 역시 SSH처럼 설치가 안되는데 깨지는 메시지 중에 영어로 dev/cd가 보이길래  설치 씨디를 넣고 해보니 설치가 된다.

SSH역시 설치 씨디를 넣은채로하니까 잘 깔려서 이제부터는 서버를 베란다에 두고 조용하게 내방에서 설치 작업을 할 수 있게 되었다.^^

한글은 일단 그냥 두고 레일스 설치 시작. 최신버전을 설치하기 위해 직접 컴파일 하는 방법을 쓰기로 함.
http://blog.mondragon.cc/articles/2007/02/03/compiling-ruby-1-8-5-w-openssl-on-debian-etch-testing-and-freebsd-in-home 여기에 나온대로 보고 하는데 make가 설치되어 있지 않단다 --;
sudo apt-get install make 로 make를 설치하고나서 make하니 에러가 주르르 나온다--;

64비트 버전이라서 그런것일까? 32비트 버전으로 다시 받아서 깔아봐야겠다.고 생각했으나 16기가의 메모리를 쓰기 위해서는 64비트 버전이 필수란걸 새삼 깨닫고--; 다시 64비트 내에서 해결할 방법을 찾기로 함.

서버 버전이 사이즈가 작아서 안깔려 있는 화일들이 많은듯 하여 데스크탑 버전으로 다시 설치함

루비와 레일스는 시냅틱 패키지 매니저로 1.8.5버전이지만 그냥 깔았는데, rmagick설치하는데도 에러가 나서 컴파일문제는 반드시 해결해야만하는 문제가 됨

해결책찾음 " sudo apt-get install build-essential " 컴파일에 필요한 것들이 설치되지 않아서 생기는 문제였음

데스크탑 버전에서는 로컬 터미널에서 한글이 깨지지 않고 나온다. 그러나 ssh 클라이언트에서는 여전히 깨져 나옴

ssh에서 한글이 깨지는 문제를 http://www.lug.or.kr/home/bbs/board.php?bo_table=using&wr_id=11 여기에서 보고 따라 했으나 여전히 깨짐 --;

그리고 rmagick설치시 에러는 다른 것이 원인인데, 에러메시지는 다음과 같이 나온다. " Can't find Magick-config or GraphicsMagick-config program "

우분투 패키지 사이트(http://packages.ubuntu.com/)에 가서 저런 화일을 뒤져보면 libmagick9-dev를 깔아야 한다고 나온단다.   sudo apt-get install libmagick9-dev로 해결

한글이 깨지는 문제는 ssh클라이언트를 Xshell로 바꿔서 해결, Xshell에도 utf-8인코딩은 기본값이 아니니 수정해야함. 다만 Xshell은 유료프로그램이다. UTF-8인코딩되는 무료 ssh클라이언트 아시는분 알려주시면 감사^^

이쯤하니 내가 짠 rails프로그램을 복사해 넣어도 잘 돌아간다.

여기서 다시 먼저 포기했던 루비 컴파일해서 깔기를 시도 했다.
예상대로 다른것은 다 잘 됐는데 mysql이 말썽이다. /tmp/mysql.sock 를 찾을 수가 없다는 에러를 낸다.
인터넷에서 찾아보니 많은 사람들이 같은 문제를 겪고 있었다.

설상가상으로 mysql gem을  설치할때도 에러가 난다. 컴파일 하는데 필요한 라이브러리나 헤더화일이 없다고 나오는데 아무리 찾아도 뭐가 빠졌는지를 알수가 없다. 일단 포기했으나...
나중에 방법 찾았다. sudo apt-get install libmysqlclient15-dev 해주면 잘 된다. ^^

인터넷을 뒤진 결과 mysql연결 문제는 몇가지 해결책이 있었다.
첫째, 레일스 액티브 레코드에 있는 소켓 화일 위치지정을 바꿔주는 방법
$HOME/gems/gems/activerecord-1.15.3/lib/active_record/vendor/mysql.rb 의   MYSQL_UNIX_ADDR = "/tmp/mysql.sock" 를 "/var/run/mysqld/mysqld.sock"로 바꿔준다.
둘째, 레일스의 database.yml에 socket: /var/run/mysqld/mysqld.sock 를 한줄 넣어 준다.
셋째, ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock 로 링크를 만들어 준다.
넷째, gem install mysql 로 젬을 깔아준다. 어제 만들어 놓은 /tmp/mysql.sock가 없어 졌는데도 mysql gem을 설치하니 잘 돌아가는걸 보니 이것도 통하는 듯 ^^


설치를 대충 마치고나니 잠시 64비트 시스템으로 갈 때의 위험성에 대해 정리를 해보는 것도 좋을 듯 하다.
일단 현재까지는 플래쉬플레이어는 쓸수 없지만 서버인 경우에는 안쓰니 상관이 없다. 컴파일이 잘 안되던 것도 결국 필요한 라이브러리가 없어서 생겼던 일이니 문제는 아니다.

주로 변수지정 쪽의 프로그램 소스 자체가 바뀌어야 한다고 해서 안되면 어떻게 하나 걱정을 했었는데 괜히 겁냈다. 다 바꿔 놨는지 잘 컴파일 되고 잘 돌아간다. 적어도 아직까진 ^^
 
이제부터는 DNS와 아파치등을 만져줘야하는 virtual hosting 세팅이다.

세팅에 앞서 현재 상황을 보자면,  서버는 아직 IDC에 있지 않고 집 베란다에서 윙윙거리고 있는 중이고, 공유기 밑에 붙어서 192.168.0.7번이라는 주소를 dhcp를 통해 받고 있는 중이다.

도메인 등록한 사이트의 홈페이지에 가서 새로 등록한 도메인 두 개의 네임서버로 공유기의 주소를 세팅해 놨고, 공유기의 포트 포워딩을 서버 주소인 192.168.0.7번으로 해서 포트 대부분을 열어 놨다. 이게 먹힐지 안먹힐지 잘 모르겠지만 일단 해봤는데 잘 되네 ^^

그리고 하려는 것은 두개의 도메인을 하나의 서버에서 서비스 하려는 것인데, DNS에도 가상 서버를 세팅해야 하고 아파치에도 해줘야하며, 각각의 가상 서버에 mongrel_cluster 들을 따로 붙여주는 것이다.

DNS는 bind9을 설치하였다. 그런데 ubuntu가 레드햇 등과는 좀 다르기도 하지만 이게 버전이 올라가면서 설정 화일들의 위치 등을 수시로 바꾸는 듯 하다.
아무튼 이 버전에서는 /etc/bind/named.conf.local과 같은 위치에 newdom.co.kr.zone과 newcon.com.zone을 만들어서 세팅을 하는 것이 기본인듯하다.  zone화일의 위치는  /etc/bind/named.conf.local 에서 지정하기 나름이다. 혹자는 /var 밑 어딘가가 기본 위치로 세팅 되어 있지만 절대 패스를 주면 그냥 바로 옆에 둬도 된다. named.conf 화일을 봐도 바로 옆에 두고 있다.

DNS 세팅을 하면서 가장 문제였던 부분은 /etc/resolv.conf에 있는 네임서버를 지금 세팅중인 서버로 바꿔줘야 nslookup이나 host 명령이 새로 세팅한 내 서버의 가상서버의 주소들에 접근할 수 있다는 것이다. 안그러면 bind니 뭐니 백날 설정해봐야 못찾는다고 나온다. 이것 때문에 한참 고생했으나 인터넷에 있는 설정법에는 대부분 resolv.conf를 고쳐주라는 내용이 없다.

설정 바꾸고 나면 bind 재시작 /etc/init.d/bind9 restart. DNS 설정 삽질의 끝은 여기가 아니었다. 서버를 집에서 세팅하면서 등록한 도메인의 IP주소를 하나로통신에서 DHCP로 받은 주소로 임시로 지정해뒀었는데 그것이 나중에 서버를 IDC에 갖다 놓은 후에 문제를 일으켰다. 앞에 www가 붙은  주소만 윈도우즈 DNS캐쉬라는게 기억을 하고 있으면서 또한 웹브라우저에서만 기억력을 발휘하는 바람에 다른데서 문제 해결하느라고 한참 고생했다.

그게 웃긴게, 커맨드 창에서는 www.blabla.co.kr로 ping을 하면 잘 찾고 dnslookup도 정상이라는거, 그런데 웹 브라우저에서만 예전 주소를 찾고 있다는거, 게다가 ns. mail.붙은 주소들은 잘 된다는거, 결국 pc에서 웹서버 돌리고 공유기에서 포트포워딩 설정해서 브라우저에서 www.blabla.co.kr로 연결해보니 예전 주소로 한방에 연결 되더라는 말이다.

windows의 DNS cache 지우는 방법은 ipconfig/flushdns 란다. 저거 한방에 하루 고생한게 해결되긴 했지만 너무 허탈하다.

apache가 "apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName"  이런 에러를 낼 때는 /etc/apache2/apache2.conf   파일의 끝부분에 ServerName localhost 를 입력해 주면 된단다. 외국 사이트에서만 해결책을 찾느라 엄청 고생했는데 우리나라 블로그에서 답을 찾았다.

apache께서는 또한 다음과 같은 에러도 내주셨다.
 " VirtualHost *:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results "
이건 설정 중에 conf.d/virtual.conf의 NameVirtualHost뒤에 쓴 * 와 sites-available/mysite.com 의 VirtualHost 뒤에 쓴 *:80 이 달랐기 때문에 났던 에러였다. 위 두 설정에는 같은 내용을 써주어야만 한다고 한다. *:80로 통일 하니 에러가 사라졌다. default로 설정되어 있는 사이트의 해당  값이 *로 되어 있으니 같이 변경하거나 default 사이트를 죽여(a2dissite default)버린다.
ubuntu(debian)에서의 apache2 설정에 대해서는 이곳 참조

여기서 잠시, 데이타 베이스 생성시 utf8로 지정하는 법
mysql -u root -p
mysql>create database blabla_developmen character set utf8;

database dump받은것을 import할때 인코딩 문제
덤프 받은 것을 울트라 에디터로 열어서 좀 수정해서 import했더니 한글 만 쏙 빠진채 들어갔다.
울트라 에디터의 File메뉴에 있는 Conversion에서 ascii to utf-8로 해서 저장하니 잘 들어간다.

mysql password 바꾸는 법은 두 가지가 있다.
mysqladmin을 이용하는 법과 mysql이라는 데이타베이스의 user table을 수정해주는 방법이다.
mysqladmin -u root -p password 12345 라고 치면 기존 패스워드를 물어본다. 기존 패스워드 쳐주면 12345  로 패스워드가 바뀐다.
mysql database의 user table 수정하기는 아래 처럼 한다.
update user set password = password('12345') where host = 'localhost' and user = 'root';

서버를 IDC에 박아 넣고 왔다.(2007.5.30)
네트워크 세팅할때 IP주소를 어떤 화일에 넣었는지를 그새 까먹어서 GUI에 있는 네트웍 설정을 써야했다.
IP주소 세팅은 /etc/network/interfaces 화일에 설정한다.
IDC에서는 고정 IP를 주니까 dhcp로 되어 있으면 static으로 만 바꿔주고 IDC에서 알려주는 대로 나머지 주소들 쳐 넣으면 된다.

서버의 DNS 서버 세팅은 /etc/resolv.conf 를 수정해준다. 내 서버와 IDC의 네임서버를 같이 넣었다.

DNS 서버를 내가 운영하면서 같은 IP로 여러 도메인을 운용하기위해 도메인을 등록한 회사의 사이트에 가서 내 서버의 IP를 DNS 서버로 세팅 해주었다.

서버에서 production 모드로 서버를 가동하려고 하는데 database를 production으로 전환해주는 방법에 대해서는 책에서 언급이 없다. 카피스트라노로 하면 자동으로 rake를 돌려주는지 모르겠으나 현재 카피스트라노는 제대로 돌아가질 않으니 모르겠고.. 찾아보니 환경변수를 설정해서 해결해주고 있었다.
export RAILS_ENV=production  해준 후에  rake db:migrate 해주니 잘 된다 --;

아 그리고 프로덕션 모드로 하니까 예전에 설치했는데 한번도 작동하지 않던, 에러났을때 알려주는 exception notification이 비로소 작동하기 시작한다.