星期三, 1月 29, 2014

在Rails使用SQLServer

因為敝公司只有一台MS SQL Server,所以我沒得選擇,要讀人事資料肯定要連線到SQLServer。


比較不需要編譯的方式就是使用 jRuby,但我卻吃了不少苦頭,重點如下:
  1. 最新版的jRuby要JDK 1.7,也就是Java 7,到Oracle下載就好。
  2. 在Windows版裝完Rails沒有自動產生對應的bat檔,所以要自己寫,像是 rails.bat和rake.exe與 rawr.bat等等,得自己加,例如rails.bat:
    "%~dp0jruby.exe" -S rails %*
  3. 好不容易更新完gem等等,rails server時卻有JCE的錯誤,就是要使用高強度的JCE啦。
  4. 現在內建的ActiveRecord JDBC Adapter就支援MS SQL Server (activerecord-jdbcmssql-adapter),但它也有寫uses the OSS jTDS driver by default which might have issues with the latest SQLServer (but should work using the Microsoft JDBC Driver for SQL Server - we recommend using 4.0)。所以得下載新版的Microsoft JDBC Driver 4.0 for SQL Server,只要下載tar.gz版本,取出其中的sqljdbc4.jar放在jRuby\lib底下,或是jre\lib,要注意另一個sqljdbc.jar不能用...。
  5. 接下來設定database.yml 就好,例如:
    development:
      adapter: jdbcmssql
      driver: com.microsoft.sqlserver.jdbc.SQLServerDriver
      url: 'jdbc:sqlserver://servername\SQLExpress;databaseName=databasename'
      username: db_username
      password: db_password
    若是SQLExpress要記得打開TCP/IP才能連線。

若使用C寫的正常版Ruby,需要的是Rails SQL Server,除了activerecord-sqlserver-adapter還需要tiny_tds,由於需要Native Extension,所以在Windows上別忘了安裝Ruby Development Kit
gem install tiny_tds activerecord-sqlserver-adapter

說實在,在Windows寫Rails真是自找麻煩,尤其是x64的Ruby問題更多。因此在Windows環境我才會改用jRuby,其他類unix平台就直接用RVM安裝Ruby即可。

沒有留言: