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

Posted

技术标签:

【中文标题】Ruby 2.4 升级后 - 尝试加载 gem \'uglifier\' 时出错 (Bundler::GemRequireError)【英文标题】:After Ruby 2.4 upgrade - error while trying to load the gem 'uglifier' (Bundler::GemRequireError)Ruby 2.4 升级后 - 尝试加载 gem 'uglifier' 时出错 (Bundler::GemRequireError) 【发布时间】:2017-05-18 15:14:51 【问题描述】:

我刚刚升级了我的应用程序以使用 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)

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

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

有没有其他人遇到过这个错误并且知道如何解决?

Gemfile 中的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 <top (required)>'
/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 <top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/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 `<module:ExecJS>'
/home/severin/.rvm/gems/ruby-2.4.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `<top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/home/bin/rails:9:in `require'
/home/bin/rails:9:in `<top (required)>'
/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 `<top (required)>'
/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 `<top (required)>'
/home/severin/bin/spring:13:in `require'
/home/severin/bin/spring:13:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
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 `<top (required)>'
    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 `<top (required)>'
    from /home/severin/bin/rails:9:in `require'
    from /home/severin/bin/rails:9:in `<top (required)>'
    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 `<top (required)>'
    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 `<top (required)>'
    from /home/severin/bin/spring:13:in `require'
    from /home/severin/bin/spring:13:in `<top (required)>'
    from bin/rails:3:in `load'
    from bin/rails:3:in `<main>'

【问题讨论】:

运行命令包更新,然后重试。 @Bharatsoni 这是我尝试的第一件事。 出于好奇,您正在使用什么操作系统。我在尝试让这个 gem 在 windows10 上运行时遇到问题 @Brad 运行 Ubuntu 16.10 能否请您发布Gemfile.lock 的[所有相关部分](特别是uglifier 的哪个版本?),以及完整的回溯(如果有的话)? 【参考方案1】:

这是uglifier 存储库上的一个未解决问题:Uglifier doesn't load with Ruby 2.4.0 using The Ruby Racer JS runtime。

这是由 Ruby 2.4.0 中的 unification of Fixnum and Bignum into Integer 引起的。 Here 是解决问题的拉取请求,它实际上在于therubyracer,而不是uglifier

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

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

更新therubyracer 版本 0.12.3 现已更名为 released,其中包括上述对 ruby​​ 2.4 支持的修复。

【讨论】:

以上是关于Ruby 2.4 升级后 - 尝试加载 gem 'uglifier' 时出错 (Bundler::GemRequireError)的主要内容,如果未能解决你的问题,请参考以下文章

运行 sudo gem install fastlane -NV 在安装 fastlane ruby​​zip 需要 ruby​​ version >= 2.4 时抛出错误

如何升级我的本地自定义 gem“my_gem”的 ruby​​ 版本

Mac OS 下Ruby gem的一些坑

pod search 报错 ruby环境问题#yyds干货盘点#

无法成功升级 Ruby - Gem 仍在使用旧的 ruby​​ 版本

gem install报错 ruby升级