AWS 服务器(EBS)上的 Rails 部署 | nokogiri-1.13.3-aarch64-linux 与 GLIBC_2.29 相关的问题

问题描述 投票:0回答:3

已经部署了我的 Rails 应用程序,但现在 /var/log/puma/puma.log 文件中出现以下错误

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'

同样运行推荐的 g

em install nokogiri --platform=ruby
并不能解决问题。

在 64 位 Amazon Linux 2/3.4.3 上运行的 Ruby 2.7

如有任何帮助,我们将不胜感激。

ruby-on-rails amazon-web-services amazon-elastic-beanstalk glibc ruby-2.7
3个回答
2
投票

我成功的解决方法是使用 nokogiri 1.10.10。在 v1.11 之前,nokogiri 不提供预编译的 arch64 二进制文件,因此这将强制实例本地编译 gem。

在您的 Gemfile 中指定:

gem 'nokogiri', '1.10.10'

我之前尝试在 AWS EB 实例配置中将 BUNDLE_FORCE_RUBY_PLATFORM 设置为 true,但这似乎并没有导致 gem 被本机编译。


0
投票

如有任何帮助,我们将不胜感激。

错误消息告诉您确切地出了什么问题:

  • 您正在尝试使用预编译的
    nokogiri.so
  • 该共享库是在 GLIBC-2.29(或更高版本)系统上编译的,并且 需要该版本
  • 您正在运行 GLIBC-2.16 或更早版本的系统。

要解决此问题,您需要获得适合您(旧)目标系统的

nokogiri.so
。您不能只是从较新的系统复制它。


0
投票

gem uninstall nokogiri bundle config set force_ruby_platform true bundle install

这里还有一些有用的建议:
https://github.com/evilmartians/terraforming-rails/issues/51

© www.soinside.com 2019 - 2024. All rights reserved.