天天看點

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

<1>準備工作

<1.1>環境參數

在進入本章節資料庫通路測試之前, 很有必要說明測試的Rails環境各方面參數 請參照修改:

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

 &lt;1.2&gt;開發工具

配置好了Rails開發環境後, 說明一下在程式設計使用編譯工具Aptana Red Rails. Aptana是一個基于Eclipse的內建開發環境,其最廣為人知的是它非常強悍的JavaScript編輯器和調試器,去年Aptana吸收了Radrails項目,添加了非常強大的Ruby on Rails支援, 這款工具也是目前Ruby on Rails 社群中使用比較多編譯工具之一 其中對代碼着色和很多自動基于rails操作全部內建起來 當然你也可以很友善在工具調用Shell利用Rails自身腳本快速建立.

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

&lt;2&gt;Rails對資料庫支援

&lt;2.1&gt;一個SQLSErver檔案支援問題

Rails目前主流的資料庫以及小型資料庫都考慮到了, 支援面比較廣,Rails可以與DB2,MySQL(首選),Oracle,Postgres,SQL Server,以及SQLLite一起工作.因為Rails本身附帶了MySQL資料庫驅動是以對MySQL支援基本"無縫連接配接"方式.如果想使用連接配接MySQL意外資料庫需要下載下傳驅動.今天着重測試SQLServer資料庫連結.

相比DB2/MySQL/Oracle資料庫 SQLServer 對rails 資料通路的支援就顯得有點麻煩:具體步驟如下:

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

 操作步驟是沒有問題的, 在進行到第三步時 碰到一個問題:當我下載下傳最新的Ruby-DBI: Version-dbi-0.4.3.zips

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

 解壓本地目錄後無法找到相應的目錄和對應的ADO.RB檔案. 看了下面又有版本 以為版本問題 我把所有的DBI全部下載下傳後發現:

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

 問題是:在0.2.0-0.2.2版本間能夠找到SQL SERver通路資料庫支援檔案ADO.rb 而在最新的0.4.0-0.4.3四個版本中始終無法找到對應目錄下ADO.RB檔案 不知這是為何??例如在0.2.0版本加壓後目錄:\dbi-0.2.0\lib\dbd\下

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

 能夠清晰看到ADO.rb(稍後會驗證是否連接配接SQLSERver成功) 同時能夠看到支援DB2/MySQL/ODBC/Oracle/SQLite支援的.RB檔案 不知這是什麼原因???

&lt;2.2&gt;配置DataBase.yml檔案異常

如上當我們把找到的對SQLServer資料庫通路支援的ADO.Rb檔案拷貝Ruby安裝目錄下, 進入程式設計測試資料庫時還需要Config配置在檔案目錄下Config\DataBase.xml檔案

我們先看看RedRails工具中尚未配置原始Database.yml:

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

 從上圖就能清晰看出整個Database.XML檔案分為三個部分.分别代表開發/測試/最終産品資料庫配置. 分别對應三個資料庫. 開發階段程式設計工作時采用開發資料庫,測試階段則使用測試資料庫, 每次單個測試執行之前都可以将資料庫清空,以便獲得一個幹淨的運作環境. 而相關生産資料庫時最紅産品上線使用的. Rails這樣做主要目錄在整個開發階段對哥各個資料庫通路保持獨立. 即如上A B C三個階段.

我們再來看看Database.XML檔案存儲目錄:如下用RedRails建立的Rails項目目錄結構:

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

 在開發語言中給予Web應用中我們一般把資料庫連結資訊 和代碼放在一塊或是通過調用Connection()類方式通路Web.Config檔案傳遞使用者名/密碼 資料庫名 這些對應用程式敏感的資訊.這樣做法在Rails中認為一方面缺乏安全上保障, 另外一方面在編碼上沒有靈活性. 如果适應小的項目和應用沒有多麼問題, 發生需求擴充這種方式就令人煩勞了不少.在Rails中提倡的是把資料庫的連接配接資訊儲存在代碼之外. 對應目錄結構就是在Config\DataBase.yml檔案.

目前我們要測試的是SQL SErver資料庫連結 仔細看上圖中DataBase.xml上對應adapter卻是sqlite3. 這是因為在Red Rails中建立Rails Project 資料庫Sqlite3是預設:

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

 是以在建立RedRails工具中建立需要指定我們需要測試的SQL Server,在來配置Database.yml檔案開發環境資料庫:

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

 ok.到此我們已近配置相關Rails在Development開發環境資料庫配置資訊. Rails Application 在啟動運用程式後就會立即自動檢測. 這是提示一個異常資訊:

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

這是s提示我們初始化一個關于SQlServer-adapter通路需要的Gem.RubyGems 是用于 Ruby 運作時環境中的庫和應用程式的标準打包和安裝架構,在Rails 2.0中資料庫連接配接器ActiveRecord sqlserver adapter 不再包含其中,資料庫的擴充卡插件需要用gem 來單獨安裝,ok,我們打開CMD輸入: gem install activerecord-sqlserver-adapter : 

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

 如上提示sqlserver-adapter初始化成功,gem初始化格式為: gem install [gem的具體名稱] ,當然你有了編譯工具一切都不會這麼複雜.在RedRails中你可以更加容易管理Gem.:

在Red Rails工具左下角點選按鈕:

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

 出現Red Rails對Gem管理工具:

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

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

 工具方式更加直覺能夠看到目前Rails版本中的Gem項, 可以批量更新Gems 而不用要記住各種複雜的CMd參數名稱和要更新Gem的名稱. 這裡順帶說一下RedRails工具對Gem管理操作運用.在回頭來看初始化ServerGem初始化後.這時異常問題就解決. 但是如果保證在Rails Application 在運作前在SQLserver 資料庫必須建立相關的資料庫 depot_development同時附帶一個産品表.

建立SQL腳本:

--目前隻建立開發資料庫 測試/産品尚未建立

--Author:chenkai Date:2010年7月29日13:02:46

IF exists(select * from sys.databases where name='depot_development')

drop database depot_development

go

create database depot_development

--建立産品表

use depot_development

IF exists (select * from sysobjects where id = object_id(N'[Products]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [Products]

create table Products

(

Id int not null primary key identity(1,1),--主鍵

Title varchar(100) not null,

Description text not null,

Image_Url varchar(300) not null,

Price decimal(10,2) not null,

CreateDate datetime not null default(getdate())

)

--

select * from Products

&lt;3&gt;測試Sql Server連結狀态

在上一步排除Rails Application異常資訊同時 通過Database.yml配置,成功連接配接開發環境的資料庫'depot_development'. 這時可以快速在Rails Application中測試資料庫連結狀态資訊.

注意我們在建立資料庫同時也附帶一個産品表Products,現在建立一個小應用測試一下,在cmd指令中輸入: ruby script/generate scaffold Product

注意在輸入前 Cmd必須選中本地建立Rails硬碟根目錄下. 等于說調用Script腳本工具時目前項目的. 例如:這個Rails Application 硬碟路徑C:\ruby\chenkaiDemo\CarDepot\同時對應CMd根目錄.工具力量還是很強大 能夠快速解決這些細節問題: 在RedRails中直接選中項目根目錄右鍵點選出現菜單:

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

 直接就能打開對應目錄下的CMD:

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

 you See!工具就是如此友善做的我們想要快速要做的, 是以選擇一個适當的工具對我們程式設計效率也是至關重要的. Product參數表示我們模型的名稱.其實就是利用腳本快速建立View /Controller/Model實體 相關檔案.

&lt;4&gt;尾語

建立那些具體檔案目錄 以及檔案目錄之間關聯關系. 和最後SQLServer資料通路結果等問題.?由于篇幅有限 如上問題将寫在下一個章節.本篇本着一個初學者摸索的态度提出一個關于資料通路檔案版本問題. 同時對于通路連接配接異常處理. 其中介紹附帶一款 工具RedRails工具用法 如有任何疑問請在留言中回複我.

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