web-dev-qa-db-ja.com

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

Rubyバージョン:

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をマシンにインストールする前に、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はこの問題を解決しますが、私はそれをしたくありません。たとえば、Rails 4とRails 5のように、両方のバージョンのRailsをインストールしたかったのです。その構成は可能ですか?

48
coffeina

Ruby 2.4では、整数型が統一されました(つまり、FixnumBignumIntegerになりました)。これは、クラスの区別に依存する既存のgemとのかなりの数の非互換性をもたらします。

ActiveSupportの古いバージョンは、データをシリアル化しようとするときに、この統一とそれに対する嫌悪感を嫌うものの中にあります。そのため、次の2つのオプションのいずれかがあります。

  • Rubyを2.4より前のバージョンにダウングレードできます。 Ruby2.3.x。
  • または、Railsを新しいバージョンにアップグレードできます。好ましくは、それはRails 5.xです。 Rails 4.2.8 でリリースされた4.2-stableブランチにもパッチがあり、公式にRails 2.4をサポートするRuby 4.2シリーズの最初のバージョンになります。 。以前のRailsバージョンはRuby 2.4と互換性がありません。
95
Holger Just

同じエラーがありますが、5.0にアップグレードしたくありません。アプリが非常に大きく、アップグレードに時間がかかりすぎます。 Rails 4.1.7Rails to 4.2.8 最初のRailsリリースにアップグレードし、Ruby 2.4をサポートしています:

gemfile内:

gem 'Rails', '4.2.8'

次に:

bundle update Rails
24
Зелёный

エラーに関しては、リリース直後の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) 。

9
user1351104