zoukankan      html  css  js  c++  java
  • Rails 连接 Sql Server的问题(ZT及补充)

    来自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
  • 相关阅读:
    算法
    爬虫--scrapy框架
    Flask--SQLAlchemy
    Flask--WTForms
    Django--model操作
    Odoo10 自定义模块创建
    odoo10 工作流、安全机制、向导
    odoo10 高级视图
    odoo10 onchange、唯一性约束
    Odoo10 模型(结构化的应用数据)、视图(用户界面设计)
  • 原文地址:https://www.cnblogs.com/chinatefl/p/566490.html
Copyright © 2011-2022 走看看