Gem 加载错误为:类 'ArJdbc::MSSQL::UUIDType' 的未定义方法 'type_cast_from_database'



我已经在Rails 5.1(或5.2(中使用activerecord jdbcmssql适配器好几个小时了。我安装了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'

我在谷歌上搜索了很多,但没有找到解决方案或提示是什么导致了这个错误。以下是更多信息:

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

Ruby:jruby-9.1.1.7

操作系统: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'

回溯

Q:Rubyjruby-9.1.17.0binjruby.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 `<class:UUIDType>'
o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:316:in `<module:MSSQL>'
o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:2:in `<module:ArJdbc>'
o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/types.rb:1:in `<main>'
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 `<module:(root)>'
o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/adapter.rb:37:in `<module:MSSQL>'
o:/bundler/bundler/gems/activerecord-jdbc-adapter-4eebab4df17d/lib/arjdbc/mssql/adapter.rb:30:in `<main>'
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 `<main>'
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 `<main>'
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 `<main>'
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 `<main>'
org/jruby/RubyKernel.java:956:in `require'
bin/rails:4:in `<main>'
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
<main> 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
<main> at o:/bundler/gems/railties-5.1.6/lib/rails/command.rb:44
require at org/jruby/R

我在旧版本的rails上尝试过:4.2.10。下面是我的gemfile
之后,我可以运行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]

这是我的配置/数据库。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

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

然而,目前sqlserver适配器似乎支持JRuby。有一些小细节表明它的行为有所不同,但不需要担心太多(除了由于纯粹的.rb部分,它可能会明显慢一些(。

最新更新