개발DB를 mysql에서 oracle로 갈아타느라 몇시간 삽질을 한 기록을 남긴다.
결국 드라이버 dll 이리저리 복사하는 것과, type이라는 column 명을 쓰면 안된다는 것을 몰라서 한 삽질이었다. 오늘 밤 시간을 고스란히 날렸네. 에라이. MagicFieldNames in Ruby on Rails를 참고하자. 아, 초짜의 길은 멀고도 험하구나.
- Ruby용 OCI 드라이버는 Ruby/OCI8에서 다운받는다. Ruby on Rails on Oracle: A Simple Tutorial를 참고한다.
- 다운받은 script를 실행하면 뭔가 파일을 여러군데 카피한다.
- 실행해보면 뭔가 에러가 난다.
- oci.dll이 필요하다. 이를 얻기 위해서는 oracle client를 oracle 홈페이지에서 다운받아 설치한다.
- 아마 oracle client를 설치하면 자동적으로 PATH 환경변수에 등록이 될 것이다. 이것으로 OK인 것 같았다.
- 이미 나는 table schema를 SQL로 가지고 있었으므로 migration을 그냥 건너뛰고 바로 coding에 들어갔다. Rails 실행해보니 이상한 에러가 났다.
- rails console에 들어가 실행해보니 oci driver init error라고 표시된다. 이래저래 삽질하다 포기하고 그냥 oracle client 밑에 oci.dll, ociw32.dll, oraocci10.dll, oraocixe10.dll, orawsec10.dll 다 복사해서 ruby/bin , rails의 내 application 디렉토리에 복사했다. 뭔가 된다.
- 제시된 table명이 rails의 convention과 맞지 않아 set_table_name을 통해 table 명을 지정해줬다.
- 어떤 table에서 오류가 난다. 아래와 같이 나오니 초짜로서는 도저히 근원을 알 수 없다.
NoMethodError: undefined method `empty?' for 1.0:Float
from c:/work/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active
record/base.rb:1055:in `instantiate_without_callbacks'
from c:/work/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active
record/callbacks.rb:204:in `instantiate' - 대략 1시간 삽질 후, type이라는 column 명이 문제가 된다는 사실을 알았따. 아마 base의 type이라는 method와 쫑나는 것인가보지? 에러메세지가 저렇게 나오면 어떻게 알아보라는 것이냐. 이럴때 문득 "아, Java였으면.." 이라는 생각이 잠깐 들었다.
결국 드라이버 dll 이리저리 복사하는 것과, type이라는 column 명을 쓰면 안된다는 것을 몰라서 한 삽질이었다. 오늘 밤 시간을 고스란히 날렸네. 에라이. MagicFieldNames in Ruby on Rails를 참고하자. 아, 초짜의 길은 멀고도 험하구나.




덧글
제우스 2007/07/11 10:28 # 삭제 답글
지금하고 있는 프로젝트를 레일즈로 했어요..미리 알았다면 도움을 줄 얘기가 많았을텐데.. ^^
오리님과 같은 오라클에 추가적으로 2개의 데이터베이스에
접속하는 방식이어서 ^^ 팀위키에도 정리해놨는데 ㅋㅋ
외부에서 접근이 안되지만..
오라클 클라이언트 대신에 인스턴트클라이언트를 깔면 되요
필요한 dll만 가져오고 그걸 패스로 잡으면 끝 ^^
입명이 2007/07/11 10:50 # 삭제 답글
ㅋㅋ 오라클은 못쓰는 컬럼명이 참 많은거 같아요 =ㅁ=;
오리대마왕 2007/07/11 17:33 # 답글
제우스//이미 더럽긴 하나 동작하는 상태에 이르렀으니, 역으로 하나씩 지워서 깔끔한 set을 만들어봐야 겠어요. 인스턴트클라이언트와 일반 XE client 차이점이 있나보네요? 앞으로 많은 지도 편달 부탁드리겠습니다. m(_ _)m입명이//오라클이 문제라기 보다는 rails가 알아서 해 주는 것들이 많기 때문이라고 봐야 할 거에요. 거기에 저의 무식이 상승작용을 일으킨 것이구요. 오라클은 "그런거 쓰지 말아라" 라고 깔끔하게 얘기해 주니 별 상관이 없죠. :)