Rails 串連 Sql Server的問題(ZT及補充)

來源:互聯網
上載者:User
來自Jouy國際blog,其中與書籍不同處做單獨列出。大家自行嘗試。
Rails提供了很好的My SQL支援,不須做任何配置,即可串連。但是,對於SQLServer的串連就比較煩瑣。
下面將介紹一種採用Ruby-DBI 提供的一個ADO Driver來串連。
安裝one -click installer 來安裝ruby 的話就已經安裝了所有串連SQL Server使用的需求包.但是,並沒有安裝ADO Driver.
這樣來安裝它:
1. 在Ruby目錄下找到這個目錄: \ruby\lib\ruby\site_ruby\1.8\DBD
例如:我的Ruby安裝在D:\ruby中,所以是這個目錄D:\ruby\lib\ruby\site_ruby\1.8\DBD
在該目錄中建立一個ADO檔案夾
2. 下載Ruby-DBI
3. 將lib/dbd_ado/ADO.rb檔案拷貝到X:/ruby/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb
patch x:\Ruby\lib\ruby\gems\1.8\gems\activerecord-1.10.1\lib\active_record\connection_adapters\sqlserver_adapter.rb 檔案
SELECT COLUMN_NAME as... 改成
SELECT LOWER(COLUMN_NAME) as...
record[col] = row[col]改成record[col.downcase] = row[col]
在《Agile Web Development with Rails 》中 上邊紅色的部分是沒有。
配置database.yml:
development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here

這樣就可以串連上了.

通過以上修改的確可以連上並使用sql server資料庫了,但如果使用“rake db:migrate”時你可能會碰到如下問題:

-- create_table("xxx_groups", {:force=>true})
rake aborted!
DBI::DatabaseError: Execute
    OLE error code:80040E14 in Microsoft OLE DB Provider for SQL Server
      第 3 個列或參數: 不能對資料類型 int 指定列寬度。
    HRESULT error code:0x80020009
      發生意外。: CREATE TABLE xxx_groups ([id] int NOT NULL IDENTITY(1, 1)
 PRIMARY KEY, [built_in] bit DEFAULT 0 NOT NULL, [parent_id] int(11), [private_u
ser_id] int(11), [private_component_id] int(11), [name] varchar(192) DEFAULT ''
NOT NULL, [description] text DEFAULT '' NOT NULL, [created_on] datetime NOT NULL
, [updated_on] datetime NOT NULL)

從上面產生的sql可以看出問題的所在,int也定義了限制,在sql server中int的長度是固定的。
下面要繼續修改sqlserver_adapter.rb檔案
找到column_type_sql << "(#{limit})" if limit (rails 1.1.6版本在第477行)
改為
column_type_sql << "(#{limit})" if limit && native[:name]!="int"
原因sqlserver_adapter.rb自己在前面都說過了
# SQL Server only supports limits on *char and float types
這樣 rake db:migrate也工作了。

BTW,
其實rails不是只在windows下才可以和sql server通訊,在linux下和mac osx下也可以的,相關資源如下:
HowtoConnectToMicrosoftSQLServer
HowtoConnectToMicrosoftSQLServerFromRailsOnLinux
HowtoConnectToMicrosoftSQLServerFromRailsOnOSX

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.