【问题标题】:Connecting to an MSSQL database from a Ruby on Rails application running on Ubuntu从 Ubuntu 上运行的 Ruby on Rails 应用程序连接到 SQL 数据库
【发布时间】:2011-03-03 03:17:44
【问题描述】:

我有一种情况,我正在尝试构建一个 Web 应用程序,该应用程序获取表中的记录总数并将其输出到屏幕上。听起来很简单吧...?

我遇到的主要问题是我想查看的数据库是 MSSQL。我之前没有从 Rails 建立这种数据库连接,所以我希望有人能指出我正确的方向。

我的 RoR 应用程序将运行在 Ubuntu 服务器上(并且正在 OSX Leopard 系统上开发)。

编辑:

  • 我应该澄清一下,MSSQL DB 在 SQL Server 2005 上运行并且在 Windows 服务器环境中。

  • 我尝试查看 wiki.rubyonrails.org 指南,但该网站似乎已关闭(悲伤)

谢谢!

【问题讨论】:

    标签: ruby-on-rails sql-server activerecord odbc


    【解决方案1】:

    这个 Stackoverflow 问题可能会有所帮助:Rails & MSSQL 2008 - Will We Hit Barriers?

    基本上,您需要安装 MSSQL 数据库适配器(而不是大多数教程引导您完成的 MySQL 或 Postgres),并适当地配置您的 database.yml:

    http://rorblog.techcfl.com/2008/04/14/ruby-on-rails-connection-to-sql-server/

    http://the-banana-peel.saltybanana.com/2008/06/connecto-to-microsoft-sql-server-from.html

    http://wiki.rubyonrails.org/database-support/ms-sql(尽管在撰写本文时 rails wiki 向下看)

    附:我假设 MSSQL 服务器将在某个地方的单独 Microsoft 服务器上运行。

    【讨论】:

    • 是的,对不起,我没有澄清这一点。它是在 Windows 服务器上运行的 MSSQL 2005。谢谢指导,我去看看! (是的,wiki 已经关闭并且已经有一段时间了,我希望它有我需要的东西,但几个小时都无法访问它或缓存副本......伤心)
    【解决方案2】:

    看看我做的一个例子,说明如何使用上面提到的 actionrecord-sqlserver 适配器here

    您可以将映射与 Rails 模型一起使用,并使用 ActiveModel 助手。

    【讨论】:

      【解决方案3】:

      我会说你可能需要通过 ODBC 连接到 mssql DB。似乎有一些宝石可以做到这一点。希望他们中的一个有文档可以让您走上正轨。

      ODBC rubygems

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:

          我将 Sequel 与 DBI 和 ODBC 一起使用,它似乎可以正常工作。

          require "dbi"
          require "sequel"
          Sequel.datetime_class = DateTime
          p "testing dbi"
          # to setup a DSN, Start->Settings->CtlPanel->AdminTools->DataSources
          conn = DBI.connect('DBI:ODBC:dsn')
          p conn.connected?
          p conn.select_one("SELECT @@VERSION")
          conn.disconnect
          p "testing sequel"
          db = Sequel.odbc('(odbc_dsn_goes_here)', :db_type=>'mssql')
          db.fetch("SELECT TOP 2 * FROM TABLE") do |row|
              p row
          end
          

          【讨论】:

            【解决方案6】:

            我使用 activerecord-sqlserver-adaptertiny_tds 并且有效!

            这里是database.yml

            development:
              adapter: sqlserver
              username: 'user'
              password: 'secret'
              dataserver: 'dbserver_name\instance_name'
              database: 'dbname'
              appname: 'my app name'
            

            【讨论】:

            • 建议:如果您使用的是 Rails 5,则在撰写此评论时无法安装该 gem 以支持 sql server 2005/2008。
            • 用于 ActiveRecord v5.1 的 SQL Server 适配器支持 SQL Server 2012 或更高版本。
            【解决方案7】:

            名为 active-record-sql-adapter 的 gem 可让您通过 ActiveRecord 连接到 SQL Server 数据库。你可以做类似的事情

            class RemodeDB
              establish_connection(:remote_db) #<=
              self.abstract_class = true # to avoid Rails' no associated model exception
            end
            

            然后让你的类像这样继承连接

            class Product < RemoteDB
               self.table_name ... 
            end
            

            请注意,为了连接到早期版本的 SQL Server(在您的情况下为 2005),您需要早期版本的 gem,它可能与您当前版本的 Rails 不兼容。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-30
              • 1970-01-01
              • 2014-02-12
              • 2011-12-08
              • 1970-01-01
              • 1970-01-01
              • 2011-05-28
              • 1970-01-01
              相关资源
              最近更新 更多