Ruby on Rails : MS SQLSERVER 연동하기
Rails 와 SQL Server 를 연동하는건 꽤 힘든 작업이었다. ruby 에 심어주어야하는 odbc 드라이버에는 버전 문제가 있었고, winxp 와 ubuntu 환경에서 DSN(
Data Source Name) 을 생성하는 방법을 익히는데도 시간이 걸렸고, 이를 database.yml 에 작성하는데도 혼선이 있었다.
다행히 구글링을 통해 여러 블로거들이 제시하는 방법을 적용하며 해결할 수 있었다. 이 글에서는 내가 경험하고 맞딱드린 문제들과 해결방법을 기록하고자 한다. 전체 과정을 상세히 기록하기엔 너무 양이 많기에, 블로그 링크를 걸어두어 그곳의 내용을 자세히 살펴보아야 할것이다.
본 포스팅을 실행한 환경은 다음과 같다.
os : Ubuntu Karmic Koala,
Windows XP Service Pack 3
ruby : 1.8.7 version
rails : 2.3.5 version
우선, windows xp 환경부터 보자. 윈도우 환경은 꽤 간단한 편이다.
Windows XP 에서 설치하기
1. ruby용 odbc 드라이버 받기
http://www.ch-werner.de/rubyodbc/ 에서 1.8용 i386-msvcrt-ruby-odbc.zip 파일을 다운받자. 링크된 페이지에는 다음과 같은 내용이 있다.
For Win32 operating systems DLLs of 0.997 are available in i386-msvcrt-ruby-odbc.zip. It contains the files odbc.so and odbc_utf8.so which need to be copied into the .../ruby/1.8/i386-msvcrt directory of MSVC based Ruby 1.8 installations.
ruby 1.8 환경에서는 0.997 버전을 다운받아 해당 디렉토리에 압축을 풀라는 내용이다.
이는 최신버전을 사용하지 말라는 얘긴데, ubuntu 에서 설정시에도 낮은 버전의 odbc 파일을 받아야 한다. 이는 ubuntu 설정 과정에서 설명하겠다.
2. activerecord-sqlserver-adapter 설치하기
우선 gem 을 업데이트 한후 파일을 설치하자.
gem update --system
gem install activerecord-sqlserver-adapter
3. DSN 생성하고, odbc 에 연결하기
윈도우에서는
odbcad32.exe 라는 tool 을 이용하여 DSN 을 생성해야 하는데,
http://www.truthsolutions.com/sql/odbc/creating_a_new_odbc_dsn.htm 페이지에 나온 방법대로 한단계씩 수행하면 된다.
참고로 위 링크 페이지는 windows server2000 에서 예제를 실행하는데, xp 에서는 제어판 > 관리도구 > 데이터 원본(ODBC) 로 프로그램을 실행하면 된다.
4. database.yml 에 명시하기
development:
adapter: sqlserver
mode: odbc
database: databasename
username: yourid
password: yourpassword
dsn: dsnname
dsn 입력란에는 방금 생성한 DSN 의 이름을 적으면 된다.
위의 단계를 통해 성공적으로 sqlserver 와 연결된 rails 어플을 뛰울 수 있다.
이제, Ubuntu 환경에서 연동하는 법을 알아보자.
Ubuntu 에서 설치하기
1. 필수 패키지 설치하기
$> sudo apt-get install unixodbc tdsodbc libodbc-ruby1.8
2. activerecord-sqlserver-adapte 설치하기
$> sudo gem install activerecord-sqlserver-adapter
3. freeTDS 드라이버를 unixODBC 에 인식시키기
$> sudo odbcinst -i -d -f /usr/share/tdsodbc/odbcinst.ini
만약, Ubuntu 가 아닌 다른 리눅스 배포판을 사용한다면,
http://piao-tech.blogspot.com/2008/02/using-activerecord-with-microsoft-sql.html 에 나온 방법을 이용하면 된다.
4. DSN 생성후, unixODBC 에 추가하기
$> vim mydsn.ini
[mySQL Server]
Driver = FreeTDS
Description = My MSSQL Database
Trace = No
Server = ipadress_or_hostname
Port = 1433
Database = databasename
$> odbcinst -i -s -f mydsn.ini -h
sudo 가 빠진 점에 유의하자. 이렇게 해야 System 전반에 사용되는 것을 방지할 수 있다.
unixODBC 에 추가되었는지 테스트 해보자.
$> isql -v "mySQL Server" uid upassword
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
위 화면이 뜬다면 성공이다. 간단한 sql 문을 적어 결과를 얻어올 수도 있다.
5. database.yml 에 명시하기
development:
adapter: sqlserver
mode: odbc
database: databasename
username: yourid
password: yourpassword
dsn: mySQL Server
6. rails 어플리케이션 구동하기
모든 설정이 완료되었음에도,
INTERN (0) [RubyODBC]Cannot allocate SQLHENV
라는 에러메세지가 보인다면, 이는 1단계에서 설치한 libodbc-ruby1.8 의 버전문제인데, 이경우 구버전인 0.9995 를 사용해야 한다. http://gehling.dk/2010/02/the-woes-of-libodbc-ruby1-8-and-debian-ubuntu/ 에 이에대한 설명이 나와있다.
우선 기존 libodbc-ruby1.8 을 지우자
$> sudo apt-get remove libodbc-ruby1.8
http://packages.ubuntu.com/hu/hardy/i386/libodbc-ruby1.8/download 에서 구버전을 다운받는다.
$> wget http://mirrors.kernel.org/ubuntu/pool/universe/libo/libodbc-ruby/libodbc-ruby1.8_0.9995-1_i386.deb
$> sudo dpkg -i libodbc-ruby1.8_0.9995-1_i386.deb
이제 서버를 재시작하면 연결에 성공한 화면을 볼수 있다.
참고 블로그 :
http://piao-tech.blogspot.com/2008/02/using-activerecord-with-microsoft-sql.html
http://gehling.dk/2010/02/the-woes-of-libodbc-ruby1-8-and-debian-ubuntu/라벨: Model, Ruby on Rails, SQLServer