Подтвердить что ты не робот

Уровень Ruby 2.4 и Rails 4 слишком глубокий (SystemStackError)

Я пытаюсь запустить вновь созданный проект в Rails 4.0.8, но получаю и ошибочно:

    rails s
=> Booting WEBrick
=> Rails 4.0.8 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:121: warning: constant ::Fixnum is deprecated
/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:121: warning: constant ::Bignum is deprecated
Exiting
/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:124:in `block (2 levels) in <class:Numeric>': stack level too deep (SystemStackError)
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
    from /usr/local/lib/ruby/gems/2.4.0/gems/activesupport-4.0.8/lib/active_support/core_ext/numeric/conversions.rb:131:in `block (2 levels) in <class:Numeric>'
     ... 5532 levels...
    from /usr/local/lib/ruby/gems/2.4.0/gems/railties-4.0.8/lib/rails/commands.rb:71:in `tap'
    from /usr/local/lib/ruby/gems/2.4.0/gems/railties-4.0.8/lib/rails/commands.rb:71:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

Рубиновая версия:

Rails 4.0.8

Мой Gemefile:

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.8'

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.2'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'
gem 'json', github: 'flori/json', branch: 'v1.8'
group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

Я попытался переустановить рельсы, потому что до того, как на моем компьютере установлено 5.0 Rails.

Локальные драгоценные камни:

*** LOCAL GEMS ***

autoprefixer-rails (6.6.0)
coffee-rails (4.2.1, 4.0.1)
font-awesome-rails (4.7.0.1)
jquery-atwho-rails (1.3.2)
jquery-rails (4.2.2, 3.1.4)
rails (4.0.8, 4.0.0)
rails-dom-testing (2.0.2)
rails-html-sanitizer (1.0.3)
rails_12factor (0.0.3)
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
sass-rails (5.0.6, 4.0.5)
sprockets-rails (3.2.0, 2.3.3, 2.0.1)

Meybe unistall: ruby ​​и rails решают эту проблему, но я не хочу этого делать. Честно говоря, я хочу установить оба варианта рельсов, для примера: рельсы 4 и рельсы 5. Возможно ли такое конфигурирование?

4b9b3361

Ответ 1

В Ruby 2.4 появилась унификация целочисленных типов (т.е. Fixnum и Bignum теперь то же самое: Integer). Это приводит к немало несовместимости с существующими драгоценными камнями, которые основывались на различии классов.

Более старые версии ActiveSupport относятся к тем, которые не любят это объединение и не работают над ним при попытке сериализации данных. Таким образом, у вас есть один из двух вариантов:

  • Вы можете перевести Ruby на версию раньше, чем 2.4, например. Ruby 2.3.x.
  • Или вы можете обновить Rails до более новой версии. Предпочтительно, это может быть Rails 5.x. В 4.2-стабильной ветке есть патч, который был выпущен с Rails 4.2.8, что делает его первой версией серии Rails 4.2, которая официально поддерживает Ruby 2.4. Ранние версии Rails не совместимы с Ruby 2.4.

Ответ 2

Что касается ошибки, вы используете только что выпущенный Ruby 2.4, который Rails и ActiveSupport (особенно более старые версии) скорее всего пока не поддерживают.

В этом руководстве Rails говорится, что версия Rails (4.0.8) предпочитает Ruby 2.0.

Вы можете исправить ошибку, обновив установку Rails (gem 'rails', '5.0') или понизив до старой версии Ruby с менеджером версий (например, $ rvm install 2.3.0; rvm use 2.3.0).

Ответ 3

У меня такая же ошибка, но я не хочу обновлять до 5.0, мое приложение очень большое и увеличение занимает слишком много времени. Я обновляю Rails 4.1.7 до Rails to 4.2.8 первый выпуск Rails с поддержкой Ruby 2.4:

в Gemfile:

gem 'rails', '4.2.8'

Тогда:

bundle update rails