天天看點

rails更新到2.0時 oracle配置要做的變化正常的更新之後的麻煩令人不甘心的解決辦法終于沖了出來

去年的時候,用rails 1.2.3做過一些在oracle方面的應用. 後來, rails2.0出來後,資料庫一直使用着mysql. 這兩天又需要在oracle上使用, 于是開始在将rails2.0.2更新在oracle上. 沒想到,麻煩的事情還真不少.

正常的更新

2.0版本以後,商業資料庫的adapter被移出了核心,現在新的商業資料庫的adapter都遵循activerecord-XYZ-adapter 的命名規則,也就是activerecord-oracle-adapter.

是以需要安裝:

  • 擴充卡(adapter)
    •  gem install activerecord-oracle-adapter --source http://gems.rubyonrails.org
  • ruby-oci8驅動
    • gem install ruby-oci8 或者 ruby ruby-oci8-1.0.0-mswin32.rb
  • oracle用戶端

之後的麻煩

按有些地方提示,把yml檔案裡面的adapter: oci改成adapter: oracle,以為就能工作了. 但結果很令人失望, 老是報一條TNS的錯誤.

令人不甘心的解決辦法

反複google之後,發現有人建議把 E:\InstantRails-2.0-win\ruby\lib\ruby\gems\1.8\gems\activerecord-oracle-adapter-1.0.0.9216\lib\active_record\connection_adapters下面的oracle_adapter.rb改名成oci.rb,并且把adapter再次改回成oci.  一試之下,這招能夠奏效. 之後運作遷移任務等都變得正常.

終于沖了出來

雖然能這麼用了,但實在不相信以TDD标榜的rails會留下這麼大的一個bug,上面那個解決辦法實在讓人不甘心.

隔天再來總算發現了問題所在.

因為之前已經有了一個針對oracle的應用,于是yml裡的配置檔案是copy而來. 寫法如下:

oracle:
  adapter: oracle
  username: e
  password: e
  host: 10.11.16.63/           

 隻不過把中間的oci換成了oracle,而實際上rails2.0中把yml的配置項也adapter化了,即所有的資料庫的配置用統一的方式來處理,上面的host變成了和mysql等中一樣的database,新的寫法如下:

oracle:
  adapter: oracle
  username: e
  password: e
  database: //10.11.16.63/e           

 這樣的話,所有的情況都很正常.

關鍵不是在于哪種配法解決問題, 而是對rails的測試程式的信任和信心. 畢竟我對rails和tdd的好處都有信心.

而rails統一adapter的做法也不能說不好,不過确實增加了更新的麻煩, 文檔的支援也少了些.

http://soft.chinabyte.com/293/7782793.shtml