Ruby 2.4升级后 – 尝试加载gem’uglifier’时出错(Bundler :: GemRequireError)

我刚刚升级我的应用程序以使用Ruby 2.4.0在捆绑过程中没有任何错误。 但是,当我尝试启动我的服务器时,出现以下错误:

There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError) Gem Load Error is: wrong argument type Class (expected Module) 

我在这个网站上的其他答案中发现你需要在你的Gemfile中添加gem 'therubyracer' ,但是自从创建我的应用程序以来,我已经有了这个。

最新版本的NodeJS也安装在我的机器上。

有没有其他人遇到这个错误,知道如何解决它?

Gemfile中的uglifier配置:gem’uglifier gem 'uglifier', '~> 3.0.4'

全栈跟踪:

 /home/severin/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated /home/severin/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:21: warning: constant ::Fixnum is deprecated /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:94:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError) Gem Load Error is: wrong argument type Class (expected Module) Backtrace for gem load error is: /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:23:in `include' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:23:in `block (2 levels) in ' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:22:in `class_eval' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:22:in `block in ' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:21:in `each' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8/conversion.rb:21:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8.rb:22:in `require' /home/severin/.rvm/gems/ruby-2.4.0/gems/therubyracer-0.12.2/lib/v8.rb:22:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs/ruby_racer_runtime.rb:108:in `require' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs/ruby_racer_runtime.rb:108:in `available?' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:63:in `each' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:63:in `find' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:63:in `best_available' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:57:in `autodetect' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/uglifier-3.0.4/lib/uglifier.rb:5:in `require' /home/severin/.rvm/gems/ruby-2.4.0/gems/uglifier-3.0.4/lib/uglifier.rb:5:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `require' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:91:in `block (2 levels) in require' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `each' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `block in require' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `each' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `require' /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler.rb:106:in `require' /home/config/application.rb:7:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `require' /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `block in server' /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap' /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `server' /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `' /home/bin/rails:9:in `require' /home/bin/rails:9:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `load' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `call' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client/command.rb:7:in `call' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client.rb:30:in `run' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/bin/spring:49:in `' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `load' /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `' /home/severin/bin/spring:13:in `require' /home/severin/bin/spring:13:in `' bin/rails:3:in `load' bin/rails:3:in `' Bundler Error Backtrace: from /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:90:in `block (2 levels) in require' from /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `each' from /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:86:in `block in require' from /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `each' from /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler/runtime.rb:75:in `require' from /home/severin/.rvm/gems/ruby-2.4.0/gems/bundler-1.13.7/lib/bundler.rb:106:in `require' from /home/severin/config/application.rb:7:in `' from /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `require' from /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:88:in `block in server' from /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `tap' from /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:85:in `server' from /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' from /home/severin/.rvm/gems/ruby-2.4.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `' from /home/severin/bin/rails:9:in `require' from /home/severin/bin/rails:9:in `' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `load' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client/rails.rb:28:in `call' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client/command.rb:7:in `call' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/client.rb:30:in `run' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/bin/spring:49:in `' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `load' from /home/severin/.rvm/gems/ruby-2.4.0/gems/spring-2.0.0/lib/spring/binstub.rb:31:in `' from /home/severin/bin/spring:13:in `require' from /home/severin/bin/spring:13:in `' from bin/rails:3:in `load' from bin/rails:3:in `' 

这是uglifier存储库中的一个开放问题: Uglifier不使用Ruby Racer JS运行时加载Ruby 2.4.0 。

这是由于FixnumBignum在Ruby 2.4.0中统一为Integer引起的。 这是解决问题的拉取请求,实际上是在一个问题,而不是uglifier

目前,作为临时修复,您可以配置Gemfile以使用repo的主分支:

 gem 'therubyracer', git: 'https://github.com/cowboyd/therubyracer.git' 

更新therubyracer版本0.12.3现已发布 ,其中包括针对ruby 2.4支持的上述修复。