71 votes

Niveau de pile de Ruby 2.4 et Rails 4 trop élevé (SystemStackError)

J'essaie d'exécuter un projet nouvellement créé dans Rails 4.0.8 mais je reçois une 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 Ruby :

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 car avant j'avais 5.0 Rails installé sur ma machine.

Les joyaux locaux :

*** 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)

Peut-être qu'unistall : ruby and rails résoudra ce problème, mais je ne veux pas le faire. En fait, je voudrais avoir installé les deux versions de rails, par exemple : rails 4 et rails 5. Cette configuration est-elle possible ?

0 votes

Utilisez-vous un gestionnaire de version de ruby ? Comme rvm ? Vous pouvez configurer différents gemset. Chaque gemset est composé des versions de ruby et de rails. Cela signifie que vous pouvez définir différentes combinaisons de versions de ruby et de rails. Passez d'un gemset à l'autre en fonction de l'environnement de développement.

0 votes

Ce problème semble avoir été corrigé dans Rails 4.2. Voir ici : github.com/rails/rails/pull/25161

134voto

Holger Just Points 17345

Dans Ruby 2.4, il y a eu une unification des types d'entiers (i.e. Fixnum y Bignum sont maintenant la même chose : Integer ). Cela entraîne un certain nombre d'incompatibilités avec les gemmes existantes qui reposaient sur la distinction des classes.

Les anciennes versions d'ActiveSupport sont parmi celles qui n'aiment pas cette unification et qui vomissent dessus lorsqu'elles essaient de sérialiser des données. Dans ce cas, vous avez deux possibilités :

  • Vous pouvez rétrograder Ruby vers une version antérieure à la 2.4, par exemple Ruby 2.3.x.
  • Ou vous pouvez mettre à jour Rails vers une version plus récente. De préférence, il s'agirait de Rails 5.x. Il existe également un correctif dans la branche 4.2-stable qui a été publiée avec Rails 4.2.8 Cette version est la première de la série Rails 4.2 à prendre officiellement en charge Ruby 2.4. Les versions antérieures de Rails ne sont pas compatibles avec Ruby 2.4.

44voto

Зелёный Points 4299

J'ai la même erreur, mais je ne veux pas passer à la version 5.0, mon application est très grande et la mise à jour prend trop de temps. Je mets à jour le Rails 4.1.7 a la Rails to 4.2.8 première version de Rails avec Ruby 2.4 soutien :

dans le Gemfile :

gem 'rails', '4.2.8'

Ensuite :

bundle update rails

1 votes

Ceci m'a sauvé ! Cela a fonctionné bundle update rails J'ai essayé avec bundle install avant elle.

9voto

polyethylene Points 757

En ce qui concerne l'erreur, vous utilisez Ruby 2.4, qui vient d'être publié et que Rails et ActiveSupport (surtout les anciennes versions) ne prennent probablement pas encore en charge.

Ce site Le guide Rails indique que votre version de Rails (4.0.8) préfère Ruby 2.0.

Vous pouvez corriger l'erreur en mettant à jour votre installation Rails ( gem 'rails', '5.0' ) ou de rétrograder à une version plus ancienne de Ruby avec un gestionnaire de version (par exemple $ rvm install 2.3.0; rvm use 2.3.0 ).

0 votes

J'ai utilisé gem 'rails', '5.0' et il fallait aussi que je fasse bundle update pour mettre à jour activerecord à 5.0.0.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X