【问题标题】:Access Sql Server through Ruby Active Record JDBC通过 Ruby Active Record JDBC 访问 Sql Server
【发布时间】:2017-08-25 22:23:26
【问题描述】:

我一直在尝试使用 Ruby(特别是 JRuby)中的 Active Record 连接到远程 JDBC/SqlServer 数据库。这是我的代码:

require 'activerecord'
require 'activerecord-jdbc-adapter'

ActiveRecord::Base.establish_connection(
                      :adapter => 'sqlserver',
                      :username => '<username>',
                      :password => '<password>',
                      :database => '<database_name>',
                      :url => '<database_url>',
)
@connection = ActiveRecord::Base.connection

puts @connection

我也将“jdbc”作为适配器,但也没有用。

这是我得到的错误的缩写版本:

NameError: cannot load Java class com.microsoft.sqlserver.jdbc.SQLServerDriver
                  for_name at org/jruby/javasupport/JavaClass.java:286
           get_proxy_class at org/jruby/javasupport/JavaUtilities.java:34
      block in java_import at uri:classloader:/jruby/java/core_ext/object.rb:49
                       map at org/jruby/RubyArray.java:2486
               java_import at uri:classloader:/jruby/java/core_ext/object.rb:36
     block in driver_class at C:/jruby-9.1.12.0/lib/ruby/gems/shared/gems/activerecord-jdbc-adapter-1.3.23/lib/arjdbc/jdbc/driver.rb:24
               module_eval at org/jruby/RubyModule.java:2833
     block in driver_class at C:/jruby-9.1.12.0/lib/ruby/gems/shared/gems/activerecord-jdbc-adapter-1.3.23/lib/arjdbc/jdbc/driver.rb:23
              synchronized at org/jruby/javasupport/JavaObject.java:257

这不是一个具体的问题,但更多的是我不确定从这里去哪里。由于服务器上的 JDBC,在纯 Ruby 中使用“activerecord-sqlserver-adapter”不起作用。 (我可能在这里误用了这些术语,我对数据库的工作原理相当陌生。)

但是,jdbc/sqlserver gem 似乎没有得到很好的支持或已过时。这可能没有灵丹妙药,但任何方向都会有很大帮助。

【问题讨论】:

  • 我的理解是那个宝石已经过时了?但我会试一试。
  • 那是你正在使用的 gem activerecord-jdbc-adapter 我只是提供了他们自述文件中的说明(因为它被埋没了)关于如何安装正确的驱动程序(这是你的问题)以及如何配置 ActiveRecord使用它
  • 微软提供的 gem 需要正常工作的驱动程序现在似乎不再提供。当我尝试访问 Ruby 版本时,它告诉我安装“tiny_tds”gem,它仅适用于 Ruby,不适用于 JRuby。

标签: sql-server ruby activerecord jdbc jruby


【解决方案1】:

你还需要require 'active_record',不是吗?

我不确定您是否需要require 'arel'。那是由 active_record 实现的低级 sql builder/formatter。

require 'active_record'
require 'activerecord-jdbc-adapter'

ActiveRecord::Base.pluralize_table_names = false
ActiveRecord::Base.establish_connection(
  :adapter => "sqlserver",
  :host => "SqlServerHostName",
  :database => "HostDbName"
)

【讨论】:

  • 哈哈,为了清楚起见,我会把它放在问题中,但这个文件只是在一个项目中,我一直在做一堆随机的事情来测试事情是如何工作的。我相信在其他文件之一中需要 activerecord。 “主机名”指的是什么?这和网址有关系吗?这是一个远程数据库,我也会添加到问题中。
  • 盲人带盲人,在这里。你确定你安装了 MS JDBC 驱动程序,我只在 IDE 中使用过 JDBC(很少),它为我解决了驱动程序问题。主机名是托管 SqlServer 的服务器名称,数据库是该安装中的数据库。请问你用arel做什么?
  • 仅供参考 - 我使用的是 Microsoft 的 SqlServer JDBC v6.0.8112.100。
  • 我在某些时候收到了关于它的错误,所以我将它包含在内,但我实际上已经删除了它,并且一切正常。我最终下载了 MS-JDBC 驱动程序的 jar 文件,将其放入项目中并使用“requires_relative”将其带入我的测试中。
  • 我离得更近了。我正在使用 URL 连接到数据库,但随后它尝试连接到错误的端口。我可能会尝试使用 IP:port 作为主机,但我会探索更多选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多