After Ruby 2.4 upgrade - error while trying to load the gem 'uglifier' (Bundler::GemRequireError)
Asked Answered
B

1

19

I've just upgraded my App to use Ruby 2.4.0 without any errors during the bundling process. When I try to start my server, however, I get the following error:

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

I found in other answers on this site that you need to add gem 'therubyracer' to your Gemfile, but I already have had that since the creation of my App.

The latest version of NodeJS is also installed on my machine.

Has anyone else encountered this error and knows how to solve it?

uglifier configuration in Gemfile: gem 'uglifier', '~> 3.0.4'

Full Stack Trace:

/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>'
Brahmaputra answered 4/1, 2017 at 10:48 Comment(7)
Run command bundle update and then try again.Fusion
@Bharatsoni That was the first thing I've tried.Brahmaputra
what OS are you using out of curiosity. I had issues trying to get this gem running on windows10Lethbridge
@Lethbridge Running Ubuntu 16.10Brahmaputra
Can you please post [all relevant parts of] the Gemfile.lock (In particular, what version of uglifier?), and the full backtrace if there is one?Jongjongleur
Actually never mind, see my answer below...Jongjongleur
Possible duplicate of Ruby-on-rails web application could not be started because of 'uglifier'Fatigue
J
26

This is an open issue on the uglifier repository: Uglifier doesn't load with Ruby 2.4.0 using The Ruby Racer JS runtime.

It was caused by the unification of Fixnum and Bignum into Integer, in Ruby 2.4.0. Here is the pull request that resolves the issue, which actually lies in therubyracer, not uglifier.

For now, as a temporary fix, you could configure your Gemfile to use the master branch of the repo:

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

Update: therubyracer version 0.12.3 has now been released, which includes the above fix for ruby 2.4 support.

Jongjongleur answered 4/1, 2017 at 11:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.