web-dev-qa-db-fra.com

Ruby 2.4 et Rails 4 niveau de pile trop profond (SystemStackError)

J'essaye d'exécuter le projet nouvellement créé dans Rails 4.0.8 mais je reçois et erreur:

    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>'

Version rubis:

Rails 4.0.8

Mon 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

J'ai essayé de réinstaller Rails parce qu'avant j'avais 5.0 Rails installé sur ma machine.

Gemmes locales:

*** 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 et Rails va résoudre ce problème, mais je ne veux pas le faire. Beasically, je voudrais avoir installé les deux versions de Rails, par exemple. : Rails 4 et Rails 5 également. Cette configuration est-elle possible?)

48
coffeina

Dans Ruby 2.4, il y avait une unification des types entiers (ie Fixnum et Bignum sont maintenant identiques: Integer.)). Cela résulte en quelques incompatibilités avec les gemmes existantes qui reposaient sur la distinction des classes.

Les versions les plus anciennes d’ActiveSupport font partie de celles qui n’apprécient pas cette unification et la négligent lorsqu’elles tentent de sérialiser des données. En tant que tel, vous avez l'une des deux options suivantes:

  • Vous pouvez rétrograder Ruby vers une version antérieure à 2.4, par exemple Ruby 2.3.x.
  • Ou vous pouvez mettre à niveau Rails vers une version plus récente. De préférence, il pourrait s'agir de Rails 5.x. Il existe également un correctif dans la branche 4.2-stable qui a été publié avec Rails 4.2.8 , ce qui en fait la première version de la série Rails 4.2 qui prend officiellement en charge Ruby 2.4. Plus tôt Rails ne sont pas compatibles avec Ruby 2.4.
95
Holger Just

J'ai la même erreur, mais je ne veux pas passer à la version 5.0, mon application est très grosse et prend beaucoup de temps. J'améliore le Rails 4.1.7 à la Rails to 4.2.8 premier Rails version avec Ruby 2.4 soutien:

dans le Gemfile:

gem 'Rails', '4.2.8'

Ensuite:

bundle update Rails
24
Зелёный

En ce qui concerne l'erreur, vous exécutez la version récemment libérée Ruby 2.4, qui Rails et ActiveSupport (en particulier les anciennes versions)) t soutenir encore.

This Rails indique que votre Rails (4.0.8) préfère "Ruby 2.0.

Vous pouvez corriger l’erreur en mettant à niveau votre Rails (gem 'Rails', '5.0') ou le passage à une version antérieure de Ruby avec un gestionnaire de version (par exemple, $ rvm install 2.3.0; rvm use 2.3.0).

9
user1351104