代码之家  ›  专栏  ›  技术社区  ›  Ethan

从rubyonosx连接SQL Server的最佳方式是什么?

  •  3
  • Ethan  · 技术社区  · 14 年前

    我需要让我的Rails应用程序连接到MS SQL Server数据库并执行一个简单的查询来进行查找。应用程序的主要数据库是MySQL。它只需要在一旁执行这个SQL Server操作。

    最好的办法是什么?

    或者我可以使用Ruby ODBC连接。我在Gemcutter身上搜了一下发现了这些。。。

    • ruby odbc(0.99992)6390下载
    • odbc rails(1.5)2167下载

    不过,这意味着从一个Rails应用程序连接到两个不同的DBs。我甚至不知道怎么做。

    有没有人有在Ruby中使用SQL Server的经验?你认为哪种方法最实用?


    更新--让它工作

    谢谢你的帮助。根据答案和一些研究,我得出了这个结论。我要把笔记贴在下面。抱歉,语气不自然。我只是抄过来的。

    使用rubyonosx连接SQL Server所采取的步骤

    下载、配置、构建FreeTDS库

    这些文件非常详细,写得也很清楚,大部分都是。在关键的地方有一些粗糙的地方,这些地方花费了我几个小时的故障排除时间。

    默认情况下,它安装到 /usr/local/freetds/lib .

    这给了你很多实用工具和东西。它们可以帮助进行测试和故障排除。

    例如,在文档中:“tsql实用程序作为FreeTDS的一部分提供,专门用于故障排除。”

    将此添加到/etc/profile:

    # 2010-10-19
    # To support the FreeTDS library for connecting Ruby to SQL Server.
    
    PATH=$PATH:/usr/local/freetds/bin
    
    # Have FreeTDS to log some output.
    #export TDSDUMP=/tmp/freetds.log
    #export TDSDUMPCONFIG=/tmp/freetdb_config.log
    
    export PATH
    

    需要为FreeTDS创建一个配置文件。文档列出了几个可以存储的地方。唯一对我有用的是 ~/.freetds.conf ...

    [DATA_SERVER_NAME]
        host = hostname
        port = 1433
        tds version = 8.0
    

    这就是全部配置。对于 [DATA_SERVER_NAME] tiny_tds 宝石。

    不需要设置ODBC

    尽管在FreeTDS文档中有这样的描述,但不需要创建odbc.ini或odbcinst.ini文件。没有它也行。

    安装了tiny_tds gem

    这个 gem将Ruby与FreeTDS连接到SQL Server数据库。在 微小的 上面写着。。。

    “…请确保编译带有libiconv支持的FreeTDS以使编码发挥最佳效果。在控制台中运行“tsql-C”并检查“iconv library:yes”

    我做到了,而且成功了。

    它应该是这样工作的:

    require 'tiny_tds'
    client = TinyTds::Client.new(:username => '...username...', :password => '...password...', :dataserver => 'DATA_SERVER_NAME')
    sql = '... whatever ...'
    result = client.execute(sql)
    client.close
    

    活动记录

    在安装了 activerecord-sqlserver-adapter 宝石。我不需要,所以我没有安装它。

    4 回复  |  直到 14 年前
        1
  •  5
  •   Klaus    14 年前

    目前有许多开发正在进行,需要gems来连接MS SQL。

    • 您不再需要dbi或dbd。(cor0ner发布的指南是旧的)
    • 您只需要freetds、ruby odbc和activerecord sqlserver适配器
      (请遵循乌普塔发布的Xavier Shay指南)
    • 注意在ruby odbc的替代品即将推出的tiny_tds
      它使配置更加简单和快速地访问数据库
      ( http://github.com/rails-sqlserver/tiny_tds )
        2
  •  1
  •   Community CDub    7 年前

    the same strategy as I explained in this answer 但是使用 ODBC adapter as explained here 在你的 database.yml

    class SQLServerThing < ActiveRecord::Base
      establish_connection :sqlserver
      set_table_name 'things'
    end
    

    现在你可以:

    SQLServerThing.find(1)
    

    SQLServerThing.connection.select_all("SELECT * FROM table ...")
    

    如果不希望使用常规的ActiveRecord方法,则可以选择设置表名。

    不需要额外的gem(magic_multi_connections),除非您希望从同一模型中连接到多个数据库。通过使用单独的模型,可以避免引入单独的库。

        3
  •  0
  •   nonopolarity    14 年前

    我刚在一本书中读到一种叫做“魔法多重连接”的宝石

    有一个Git回购协议: http://github.com/drnic/magic_multi_connections

    你可以用谷歌搜索,但我自己从来没有试过,所以我建议你多问一下,或者创建一个简单的应用程序,与你的两个数据库管理系统对话,看看它是否有效。

        4
  •  0
  •   Sigurd    14 年前

    Here

    一般来说,您需要:

    系统级

    • 自由贸易区
    • libdbd odbc红宝石

    宝石

    • 数据库odbc
    • activerecord odbc适配器

    最近的两个是如果您计划使用activerecord。