天天看點

Ruby On Rails Connection To MicroSoft SQL Server [Part 2]

A:準備工作

可以說很多ROR的Developer都會因為版本疊代引發一系列問題.是以在進行程式設計有效測試前.我個人覺得非常有必要說明ROR開發環境參數:

<a target="_blank" href="http://blog.51cto.com/attachment/201201/142840315.png"></a>

在和Grouper成員交流時.我也相關詢問他們對于在實際Team coding時如何控制RoR的版本問題.TeamWork時他們會利用一個控制RoR版本更新工具進行各成員之間關聯.[當然他們并沒有給我看這個工具] 有點類似VSS對源碼管理.當實際項目中真需要更新時統一的把項目組成員所有開發環境進行更新. 但是從他們口中我也得知他們對ROR版本更新态度也相當的忌諱的. 一方面出于對産品運作環境穩定和可依賴性考慮. 另外一個就是他們一直在強調使用ROR的初衷 High Efficiency -高效和TeamWork Disengaged 團隊合作的自由.

在和這些國外開發人員進行簡短交流時. 我們也可以"管中窺豹" 大概能看出他們在實際項目編碼中對RoR版本問題相關處理.

B:問題解決

&lt;1&gt;ADO.RB檔案在0.4.0版本中無法找到?

針對這個問題有多個來源: 一方面有些剛接觸ROR Dvper通過&lt;&lt;Agile Web Development With Rails&gt;&gt;入門時也發現同樣問題.因為這本書在06年出版.當時DBI最新版本是0.2.1DBI才是和書中進行對應的. 這也就到導緻網上很多Copy版本都在統一說 下載下傳最新的DBI. 而曆經幾年發展目前DBI已經發展到0.4.3DBI. 是以在下載下傳之前官方已經提示檢視相關的修改日志Release Note/ChangeLog:來檢視如何發生哪些變化:

<a target="_blank" href="http://blog.51cto.com/attachment/201201/142846234.png"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201201/143122105.png"></a>

you See.在第五條明确提出從0.2.0版本後停止ADO開發并删除相關的目錄,Ruby分發包不會安裝DBI的ADO驅動,隻能在0.2.2版本及之前的版本以前找到相關的ADO.rb檔案.

這也就能夠解釋為什麼在0.4.0—0.4.3版本中無法找到ADO.RB檔案的原因.

至此這個ADO.RB檔案關于版本問題算是徹底搞清楚 是怎麼回事.下一步來測試ROR 連接配接SQLServer資料庫

&lt;2&gt;連接配接SQLServer資料庫

首先說明連接配接SQLServer資料庫的版本是MSSQLServer 2005[開發版],上一篇已經很詳細說明連接配接前的相關配置等資訊.當然如果你覺得接觸過RedRails這款編譯工具 也沒有關系. 你可以直接打開CMD輸入建立指令格式:

<a target="_blank" href="http://blog.51cto.com/attachment/201201/142853468.png"></a>

在CMD中Rails快速為我們建立批量檔案:

<a target="_blank" href="http://blog.51cto.com/attachment/201201/142858375.png"></a>

建立完成後需要在Config/database.yml簡短的修改一下Develop開發環境資料庫配置:

<a target="_blank" href="http://blog.51cto.com/attachment/201201/142904619.png"></a>

注意上面利用RedRails工具來對DataBase.yml檔案進行修改配置. 利用工具直接儲存如果沒有異常則可以證明與底層SQLServer資料庫連結成功.

當然如果你沒有下載下傳RedRails這款工具也沒有關系, 我們可以用Ruby一個測試資料庫連結的RubyConDB來測試:

require 'dbi' 

#add ADO.rb to $RUBY_HOME/lib/ruby/site_ruby/1.8/DBD/ADO   

DBname = 'master' 

username = 'sa' 

password = '' 

url = "DBI:ADO:Provider=SQLOLEDB;Data Source=127.0.0.1,1433;" \   

          + "Initial Catalog=#{DBname};User Id=#{username};Password=#{password};" 

conn = DBI.connect("#{url}")   

conn.disconnect 

當然這隻是為了測試SQLSErver連結狀态.對安全編碼上名沒有做任何控制. 在實際編碼一般采用定義一個RubyConDB類來測試資料庫連結:

require 'dbi'   

class RubyConDB   

attr_reader :name 

def initialize(name, username, password, database)   

  @server_name=name   

  @username = username   

  @password = password   

  @database = database   

  @dbh=DBI.connect("DBI:ADO:Provider=SQLNCLI;Data Source=#{name};Persist Security Info=False;User ID=#{@username};password=#{@password};Initial Catalog=#{database};")   

end 

def databases   

  db=Array.new  

  @dbh.select_all('SELECT name FROM master.sys.databases ORDER BY 1') do | row |   

   db.&lt;&lt; Database.new(@dbh,row[0])   

  end    

  db   

end   

class Database   

def initialize(dbh,name)   

  @dbh=dbh   

  @name=name   

condb=RubyConDB.new("hostname","username","password","database_name")    

condb.databases.each {|x| puts x.name} 

如上基本解決ROR連接配接MSServer資料庫問題. 當然連結SQLServer資料庫還有其他方式在類似通用方式ODBC方式.這個ODBC連結資料庫的.rb檔案不需要下載下傳的我們直接能在相關目錄下:C:\ruby\lib\ruby\site_ruby\1.8\DBD\ODBC

<a target="_blank" href="http://blog.51cto.com/attachment/201201/142910148.png"></a>

C:尾語

這個問題關于ROR連接配接MSSqlServer足足耽誤兩天時間. 當然也是一種作為一個初學者摸索過程. 而在必要探索精神 我們也有必要跳出自己圈子能夠快速有效的和他人或同行進行.也能快速的打開相關的解決問題的思路.如有任何疑問請直接留言中回複我.,

本文轉自chenkaiunion 51CTO部落格,原文連結:http://blog.51cto.com/chenkai/764749