Fedora系统启动Rails服务遇invalid ELF header错误求助
解决nio4r gem的invalid ELF header错误(Fedora+RVM环境)
错误日志
[ben@localhost-live hello_app]$ rails s => Booting Puma => Rails 7.0.4.3 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma version: 5.6.5 (ruby 3.2.1-p31) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 33779 * Listening on http://127.0.0.1:3000 * Listening on http://[::1]:3000 Exiting <internal:/usr/local/rvm/rubies/ruby-3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require': /usr/local/rvm/gems/ruby-3.2.1/gems/nio4r-2.5.9/lib/nio4r_ext.so: invalid ELF header - /usr/local/rvm/gems/ruby-3.2.1/gems/nio4r-2.5.9/lib/nio4r_ext.so (LoadError) from <internal:/usr/local/rvm/rubies/ruby-3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb>:32:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/nio4r-2.5.9/lib/nio.rb:42:in `<main>' from <internal:/usr/local/rvm/rubies/ruby-3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' from <internal:/usr/local/rvm/rubies/ruby-3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb>:32:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/puma-5.6.5/lib/puma/reactor.rb:24:in `initialize' from /usr/local/rvm/gems/ruby-3.2.1/gems/puma-5.6.5/lib/puma/server.rb:244:in `new' from /usr/local/rvm/gems/ruby-3.2.1/gems/puma-5.6.5/lib/puma/server.rb:244:in `run' from /usr/local/rvm/gems/ruby-3.2.1/gems/puma-5.6.5/lib/puma/single.rb:53:in `run' from /usr/local/rvm/gems/ruby-3.2.1/gems/puma-5.6.5/lib/puma/launcher.rb:193:in `run' from /usr/local/rvm/gems/ruby-3.2.1/gems/puma-5.6.5/lib/rack/handler/puma.rb:72:in `run' from /usr/local/rvm/gems/ruby-3.2.1/gems/rack-2.2.6.4/lib/rack/server.rb:327:in `start' from /usr/local/rvm/gems/ruby-3.2.1/gems/railties-7.0.4.3/lib/rails/commands/server/server_command.rb:38:in `start' from /usr/local/rvm/gems/ruby-3.2.1/gems/railties-7.0.4.3/lib/rails/commands/server/server_command.rb:143:in `block in perform' from <internal:kernel>:90:in `tap' from /usr/local/rvm/gems/ruby-3.2.1/gems/railties-7.0.4.3/lib/rails/commands/server/server_command.rb:134:in `perform' from /usr/local/rvm/gems/ruby-3.2.1/gems/thor-1.2.1/lib/thor/command.rb:27:in `run' from /usr/local/rvm/gems/ruby-3.2.1/gems/thor-1.2.1/lib/thor/invocation.rb:127:in `invoke_command' from /usr/local/rvm/gems/ruby-3.2.1/gems/thor-1.2.1/lib/thor.rb:392:in `dispatch' from /usr/local/rvm/gems/ruby-3.2.1/gems/railties-7.0.4.3/lib/rails/command/base.rb:87:in `perform' from /usr/local/rvm/gems/ruby-3.2.1/gems/railties-7.0.4.3/lib/rails/command.rb:48:in `invoke' from /usr/local/rvm/gems/ruby-3.2.1/gems/railties-7.0.4.3/lib/rails/commands.rb:18:in `<main>' from <internal:/usr/local/rvm/rubies/ruby-3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' from <internal:/usr/local/rvm/rubies/ruby-3.2.1/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' from /usr/local/rvm/gems/ruby-3.2.1/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb>:32:in `require' from bin/rails:4:in `<main>' [ben@localhost-live hello_app]$
解决方法
- 重新编译nio4r本地扩展:错误根源是预编译的
.so文件和当前系统/Ruby环境不兼容,执行以下命令:# 卸载现有nio4r gem uninstall nio4r # 重新安装(自动编译适配当前环境的扩展) bundle install # 或直接重新 pristine 该gem gem pristine nio4r - 校验RVM环境一致性:确保当前使用的Ruby版本与gem安装路径匹配:
检查输出中的rvm use ruby-3.2.1 gem envRUBY VERSION和INSTALLATION DIRECTORY是否对应。 - 安装Fedora编译依赖:确保有编译本地扩展的工具链:
sudo dnf install gcc ruby-devel make - 清理缓存:避免旧缓存干扰:
bin/rails tmp:clear rm -rf ~/.rvm/gems/ruby-3.2.1/cache/nio4r-*.gem
内容的提问来源于stack exchange,提问作者Benjamints
相关产品推荐
相关产品推荐

