2017-08-24 52 views
0

我一直在嘗試使用Ruby中的Active Record(特別是JRuby)連接到遠程JDBC/SqlServer數據庫。這裏是我的代碼:通過Ruby訪問Sql Server活動記錄JDBC

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 gems似乎沒有很好的支持或過時。這可能沒有銀彈,但任何一種方向都會有很大的幫助。

+0

也許這樣會有幫助嗎? https://github.com/jruby/activerecord-jdbc-adapter/blob/master/activerecord-jdbcmssql-adapter/README.rdoc – engineersmnky

+0

這是我的理解,該寶石已過時?但我會試一試。 – Cooper

+0

這就是你使用'activerecord-jdbc-adapter'的gem我簡單地提供了他們自述文件中的說明(因爲它被掩蓋了)如何安裝正確的驅動程序(這是你的問題)以及如何配置ActiveRecord來使用它 – engineersmnky

回答

0

你還需要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" 
) 
+0

哈哈,爲了清楚起見,我會把它放在問題的範圍內,但是這個文件只是在一個項目中,我正在做一些隨機的事情來測試事情是如何工作的。我相信其中一個文件需要activerecord。 '主機名'是指什麼?這與URL有什麼關係?這是一個遠程數據庫,我也將添加到該問題中。 – Cooper

+0

盲目引導盲人,在這裏。你確定你已經安裝了MS JDBC驅動程序,我只在IDE中使用JDBC(很少),並且爲我解決了驅動程序問題。主機名是託管SqlServer的服務器名稱,數據庫是該安裝中的數據庫。我可以問一下你用'arel'嘗試了什麼嗎? – donvnielsen

+0

僅供參考 - 我正在使用Microsoft的SqlServer JDBC v6.0.8112.100。 – donvnielsen