Fixing "uninitialized constant JSON::Fragment (NameError)"

Updated ago
Share

Problem

Error received when trying to install appsignal gem (v4.8) on macOS 15/26 and Ruby 3.1.2.

Installing appsignal 4.8.1 (was 3.7.5) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/local/.gem/ruby/3.1.2/gems/appsignal-4.8.1/ext
/Users/local/.rubies/ruby-3.1.2/bin/ruby -I /Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0 -r
./siteconf20251224-8646-isriwf.rb extconf.rb
<internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': uninitialized
constant JSON::Fragment (NameError)
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from /Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/json/ext.rb:8:in `<module:Ext>'
    from /Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/json/ext.rb:6:in `<module:JSON>'
    from /Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/json/ext.rb:3:in `<top (required)>'
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from /Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/json.rb:579:in `<module:JSON>'
    from /Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/json.rb:575:in `<top (required)>'
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from /Users/local/.gem/ruby/3.1.2/gems/appsignal-4.8.1/ext/base.rb:7:in `<top (required)>'
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from <internal:/Users/local/.rubies/ruby-3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
    from extconf.rb:3:in `<main>'


Resolution

This is due to an issue with the json gem dependency, calling constant that no longer exists. To resolve, uninstall json gem:

$
gem uninstall json --force

If prompted like below (due to multiple json gem versions installed), enter the "All versions" option:

Select gem to uninstall:
 1. json-2.10.1
 2. json-2.10.2
 3. All versions

Then simply, run:

$
bundle install

And the bundle should resolve the json gem dependency.