Gem Load Error是:未定义的方法`type_cast_from_database’用于类`ArJdbc :: MSSQL :: UUIDType’

我现在使用带有Rails 5.1(或5.2)的activerecord-jdbcmssql-adapter挣扎了好几个小时。 我已经安装了ant以便在捆绑期间编译gem。 捆绑过程运行正常但是当我想启动rails时我才刚刚开始

Bundler::GemRequireError: There was an error while trying to load the gem 'activerecord-jdbcmssql-adapter'. Gem Load Error is: undefined method `type_cast_from_database' for class `ArJdbc::MSSQL::UUIDType' 

我已经google了很多但没有找到解决方案或暗示导致此错误的原因。 以下是一些更多信息:

Java版本: Java(TM)SE运行时环境(版本1.8.0_171-b11)

Ruby: jruby-9.1.17.0

操作系统: Win10

部分Gemfile

 ruby '2.3.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.1.6' gem 'activerecord-jdbc-adapter', github: "jruby/activerecord-jdbc-adapter", :branch => "51-stable" gem 'activerecord-jdbcmssql-adapter',github: "jruby/activerecord-jdbc-adapter",:branch => "51-stable" gem 'activerecord-oracle_enhanced-adapter','~> 1.8.0' 

Backtrace

 Q:\Ruby\jruby-9.1.17.0\bin\jruby.exe -S rails s Bundler::GemRequireError: There was an error while trying to load the gem 'activerecord-jdbcmssql-adapter'. Gem Load Error is: undefined method `type_cast_from_database' for class `ArJdbc::MSSQL::UUIDType' Backtrace for gem load error is: org/jruby/RubyModule.java:2841:in `alias_method' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:319:in `' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:316:in `' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:2:in `' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:1:in `' org/jruby/RubyKernel.java:956:in `require' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/adapter.rb:1:in `' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/adapter.rb:37:in `' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/adapter.rb:30:in `' org/jruby/RubyKernel.java:956:in `require' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/adapter.rb:29:in `' org/jruby/RubyKernel.java:956:in `require' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency' o:/bundler/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql.rb:1:in `' org/jruby/RubyKernel.java:956:in `require' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql.rb:2:in `block in (root)' org/jruby/RubyArray.java:1735:in `each' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/activerecord-jdbcmssql-adapter/lib/activerecord-jdbcmssql-adapter.rb:1:in `block in (root)' org/jruby/RubyArray.java:1735:in `each' o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/activerecord-jdbcmssql-adapter/lib/activerecord-jdbcmssql-adapter.rb:2:in `(root)' Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:1:in `(root)' Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:81:in `' org/jruby/RubyKernel.java:956:in `require' Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:76:in `block in require' org/jruby/RubyKernel.java:1765:in `tap' Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:65:in `require' Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler.rb:114:in `require' O:/git/xxxx/config/application.rb:7:in `(root)' o:/bundler/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:1:in `(root)' o:/bundler/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:133:in `perform' o:/bundler/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:130:in `perform' o:/bundler/gems/thor-0.20.0/lib/thor/command.rb:27:in `' org/jruby/RubyKernel.java:956:in `require' bin/rails:4:in `' Bundler Error Backtrace: block in require at Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:84 each at org/jruby/RubyArray.java:1735 block in require at Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:76 each at org/jruby/RubyArray.java:1735 require at Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler/runtime.rb:65 require at Q:/Ruby/jruby-9.1.17.0/lib/ruby/gems/shared/gems/bundler-1.16.2/lib/bundler.rb:114  at O:/git/xxx/config/application.rb:7 require at org/jruby/RubyKernel.java:956 block in (root) at o:/bundler/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:1 tap at org/jruby/RubyKernel.java:1765 perform at o:/bundler/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:133 perform at o:/bundler/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:130 run at o:/bundler/gems/thor-0.20.0/lib/thor/command.rb:27 invoke_command at o:/bundler/gems/thor-0.20.0/lib/thor/invocation.rb:126 dispatch at o:/bundler/gems/thor-0.20.0/lib/thor.rb:387 perform at o:/bundler/gems/railties-5.1.6/lib/rails/command/base.rb:63  at o:/bundler/gems/railties-5.1.6/lib/rails/command.rb:44 require at org/jruby/R 

AR-JDBC不支持AR > = 5.0的 MS-SQL,因为没有足够的资源来实现SQLServer适配器。

但是,sqlserver适配器似乎现在支持JRuby。 有一些小细节,它的行为有所不同,但不用太担心(除了纯粹的.rb部分可能会明显变慢)。

我尝试使用较旧的rails版本: 4.2.10 。 这是我的gem文件。
之后我可以运行rails srails c并连接到我的mssql db。
请注意,这只是来自rails new app_name命令。

 source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 4.2.10' # Use jdbcsqlite3 as the database for Active Record gem 'activerecord-jdbcsqlite3-adapter', '~> 1.3', '>= 1.3.20' gem 'activerecord-jdbcmssql-adapter', '~> 1.3', '>= 1.3.20' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes gem 'therubyrhino' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development # Reduces boot times through caching; required in config/boot.rb # gem 'bootsnap', '>= 1.1.0', require: false # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 

这是我的config / database.yml:

 default: &default adapter: jdbcmssql pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 mode: dblib host: <%= ENV.fetch("MSSQL_HOST") { 'localhost' } %> port: <%= ENV.fetch("MSSQL_PORT") { 1433 } %> username: SA password: '!P4ssw0rd' development: <<: *default database: development_mssql 

这是我运行rbenv local时的输出:

 $ rbenv local jruby-9.2.0.0