Rails NoMethodError: неопределенный метод, новый для BigDecimal: Class - PullRequest
7 голосов
/ 14 февраля 2020

Мое приложение включено:

ruby-2.6.4 Rails 4.2.8 activerecord-4.2.8

Я обновляю приложение rails до ruby-2.6.4 При запуске задачи rake в разработке, для тестирования , Я получаю ошибки для BigDecimal() и .../vendor/bundle/ruby/2.6.0/gems/ruby-oci8/...

ArgumentError: invalid value for BigDecimal(): "0.E+00"
/sha/git/sha_human_resources/shared/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/bindtype.rb:35:in `BigDecimal'
...
.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/bindtype.rb:216: warning: constant ::Fixnum is deprecated
.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/bindtype.rb:219: warning: constant ::Bignum is deprecated
.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/compat.rb:73: warning: constant ::Fixnum is deprecated

Я нашел пару веток об обновлении гемов bigdecimal и oci8, поэтому попробовал пару версий и нашел, что они помогли: git diff Gemfile:

-gem 'ruby-oci8', '~> 2.1.5'
+gem 'ruby-oci8', '~> 2.2.8'

и добавили большой десятичный камень:

+gem "bigdecimal", ">= 2.0.0"

Теперь, когда я запускаю мое рейк-задание, я получаю эту ошибку:

rake aborted!
NoMethodError: undefined method `new' for BigDecimal:Class
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/duplicable.rb:111:in `<class:BigDecimal>'
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/duplicable.rb:106:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object.rb:3:in `require'
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object.rb:3:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/configuration.rb:2:in `require'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/configuration.rb:2:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/railtie.rb:2:in `require'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/railtie.rb:2:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/engine.rb:1:in `require'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/engine.rb:1:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/application.rb:7:in `require'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/application.rb:7:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails.rb:11:in `require'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails.rb:11:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/all.rb:1:in `require'
.../vendor/bundle/ruby/2.6.0/gems/railties-4.2.8/lib/rails/all.rb:1:in `<top (required)>'
.../config/application.rb:3:in `require'
.../config/application.rb:3:in `<top (required)>'
.../Rakefile:6:in `require'
.../Rakefile:6:in `<top (required)>'
/usr/local/rvm/rubies/ruby-2.6.4/bin/bundle:30:in `block in <main>'
/usr/local/rvm/rubies/ruby-2.6.4/bin/bundle:22:in `<main>'
/usr/local/rvm/gems/ruby-2.6.4/bin/ruby_executable_hooks:24:in `eval'
/usr/local/rvm/gems/ruby-2.6.4/bin/ruby_executable_hooks:24:in `<main>'

Doing больше гугл серфинга, я обнаружил, что информации по решению этой проблемы не так много Я видел пару упоминаний об обновлении до последней версии рельсов. Это должно решить это? Есть ли какие-нибудь обезьяны или исправления, которые могут решить / исправить / предотвратить это, пока мы не будем готовы обновить нашу версию rails? Я чувствую, что мы всегда будем гоняться за морковкой на палочке, которая является последней версией рельсов.

Спасибо за любой совет.

1 Ответ

3 голосов
/ 02 марта 2020

Согласно документации с большим десятичным числом. Для всех ruby версий 2.6 вы должны использовать версию с большим десятичным числом

The differences among versions are given below:

version characteristics                                 Supported ruby version range
2.0.0   You cannot use BigDecimal.new and do subclassing    2.4 ..
1.4.x   BigDecimal.new and subclassing always prints warning.   2.3 .. 2.6
1.3.5   You can use BigDecimal.new and subclassing without warning  .. 2.5
You can select the version you want to use using gem method in Gemfile or scripts. For example, you want to stick bigdecimal version 1.3.5, it works file to put the following gem call in you Gemfile.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...