Rails deployment on AWS server (EBS) | Issue with nokogiri-1.13.3-aarch64-linux wrt GLIBC_2.29

1.7k views Asked by At

Have deployed my Rails application but now getting following error in /var/log/puma/puma.log file

Early termination of worker

ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system with glibc < 2.17:

  /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /var/app/current/vendor/bundle/gems/nokogiri-1.13.3-aarch64-linux/lib/nokogiri/2.7/nokogiri.so) - /var/app/current/vendor/bundle/gems/nokogiri-1.13.3-aarch64-linux/lib/nokogiri/2.7/nokogiri.so

  If that's the case, then please install Nokogiri via the `ruby` platform gem:
      gem install nokogiri --platform=ruby
  or:
      bundle config set force_ruby_platform true

  Please visit https://nokogiri.org/tutorials/installing_nokogiri.html for more help.

[21228] ! Unable to start worker
[21228] /var/app/current/vendor/bundle/gems/nokogiri-1.13.3-aarch64-linux/lib/nokogiri/extension.rb:7:in `require_relative'

Also running the recommended gem install nokogiri --platform=ruby doesn't solve the issue.

Ruby 2.7 running on 64bit Amazon Linux 2/3.4.3

Any help is appreciated.

3

There are 3 answers

0
painbot On BEST ANSWER

The workaround I had success with was to use nokogiri 1.10.10. Prior to v1.11, nokogiri did not supply precompiled arch64 binaries, so that will force the instance to compile the gem natively.

In your Gemfile specify:

gem 'nokogiri', '1.10.10'

I previously tried setting BUNDLE_FORCE_RUBY_PLATFORM to true in the AWS EB instance configuration, but that did not seem to cause the gem to be natively compiled.

0
Employed Russian On

Any help is appreciated.

The error message tells you exactly what's wrong:

  • you are trying to use pre-compiled nokogiri.so
  • that shared library was compiled on a GLIBC-2.29 (or newer) system and requires that version
  • you are running on a system with GLIBC-2.16 or earlier.

To fix this, you need to get nokogiri.so that is appropriate for your (old) target system. You can't just copy it from a newer system.

0
Bret Weinraub On

At least for me, I am able to solve this issue by removing the precompiled nokogiri, and recompiling it.

gem uninstall nokogiri
bundle config set force_ruby_platform true
bundle install

There are also some useful recommendations here: https://github.com/evilmartians/terraforming-rails/issues/51