【问题标题】:How can I solve "incompatible library version" problem with ruby 2.7.4 on ubuntu 20.04?如何解决 ubuntu 20.04 上 ruby​​ 2.7.4 的“库版本不兼容”问题?
【发布时间】:2021-08-03 15:54:56
【问题描述】:

您好,这是我的第一个问题。 我正在尝试在我的服务器上构建 redmine 系统,但遇到了一些问题。

我的系统——ubuntu20.04 + nginx1.18 + mariadb10.3.30 + ruby​​2.7.4 + redmine4.2.2 / 使用rbenv安装ruby

当我尝试连接 redmine 服务器时,出现此错误

App 716658 output: Error: The application encountered the following error: libruby.so.2.7: cannot open shared object file: No such file or directory - /opt/redmine/vendor/cache/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.so (LoadError)

所以我做到了 cd /usr/lib

ln -s /root/.rbenv/versions/2.7.4/lib/libruby.so.2.7 libruby.so.2.7

然后出现不兼容的库版本错误

App 722799 output: Error: The application encountered the following error: incompatible library version - /opt/redmine/vendor/cache/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.so (LoadError)

我尝试了gem pristine --all,但没有成功。

我该如何解决这个问题?发生了这么多错误,所以我想我的设置有问题。

宝石环境

 - RUBYGEMS VERSION: 3.2.25
 - RUBY VERSION: 2.7.4 (2021-07-07 patchlevel 191) [x86_64-linux]
 - INSTALLATION DIRECTORY: /root/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0
 - USER INSTALLATION DIRECTORY: /root/.gem/ruby/2.7.0
 - RUBY EXECUTABLE: /root/.rbenv/versions/2.7.4/bin/ruby
 - GIT EXECUTABLE: /usr/bin/git
 - EXECUTABLE DIRECTORY: /root/.rbenv/versions/2.7.4/bin
 - SPEC CACHE DIRECTORY: /root/.gem/specs
 - SYSTEM CONFIGURATION DIRECTORY: /root/.rbenv/versions/2.7.4/etc
 - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
 - GEM PATHS:
    - /root/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0
    - /root/.gem/ruby/2.7.0
 - GEM CONFIGURATION:
    - :update_sources => true
    - :verbose => true
    - :backtrace => false
    - :bulk_threshold => 1000
 - REMOTE SOURCES:
    - https://rubygems.org/
 - SHELL PATH:
    - /root/.rbenv/versions/2.7.4/bin
    - /root/.rbenv/libexec
    - /root/.rbenv/plugins/ruby-build/bin
    - /root/.rbenv/shims
    - /root/.rbenv/bin
    - /usr/local/sbin
    - /usr/local/bin
    - /usr/sbin
    - /usr/bin
    - /sbin
    - /bin
    - /usr/games
    - /usr/local/games
    - /snap/bin

捆绑环境

Bundler       2.2.25
  Platforms   ruby, x86_64-linux
Ruby          2.7.4p191 (2021-07-07 revision a21a3b7d23704a01d34bd79d09dc37897e00922a) [x86_64-linux]
  Full Path   /root/.rbenv/versions/2.7.4/bin/ruby
  Config Dir  /root/.rbenv/versions/2.7.4/etc
RubyGems      3.2.25
  Gem Home    /root/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0
  Gem Path    /root/.gem/ruby/2.7.0:/root/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0
  User Home   /root
  User Path   /root/.gem/ruby/2.7.0
  Bin Dir     /root/.rbenv/versions/2.7.4/bin
Tools         
  Git         2.25.1
  RVM         not installed
  rbenv       rbenv 1.1.2-61-g585ed84
  chruby      not installed

Bundler 构建元数据

Built At          2021-07-30
Git SHA           7f0f257c7a
Released Version  true

【问题讨论】:

  • 你说的是“连接到服务器”时发生的错误。我们是否应该假设您已经安装了服务器并且它启动时没有错误?只有当你请求一个页面时它才会出错?另外,当然,您是否安装了 mysql2 gem - 那是没有找到的。
  • 是的,有服务器,这个 redmine server_name 是 redmine.kinicaremom.net ,我想看 redmine 的第一页,但它不工作。我请求一个页面,但出现错误,所以我看到 /var/log/nginx/error.log 上的日志。我检查了gem list,发现mysql2(0.5.3)。
  • 你确定你指定的mysql2版本和你的ruby版本兼容吗?
  • 我检查了rubygems.org/gems/mysql2/versions/0.5.3 并且那里 mysql2 0.5.3 REQUIRED RUBY VERSION: >= 2.0.0 所以我认为我的 ruby​​ 版本 2.7.4 没问题

标签: ruby-on-rails ruby rbenv mysql2


【解决方案1】:

您似乎已经配置了 bundler(Ruby 项目的 gem 版本管理器)以将 Redmine 的 gem 安装在与通常的系统 gem 不同的位置,即 /opt/redmine/vendor/cache

因此,通常的gem 命令不会触及那些捆绑器安装的gem,因为gem 不知道它们。要重新安装所有捆绑程序管理的 gem,您可以在 Redmine 目录中运行以下命令(即包含 Gemfile 的目录:

bundle pristine

这实际上与gem pristine --all 相同,但仅适用于捆绑程序管理的 gem。详情请见the documentation

【讨论】:

  • 好电话,霍尔格。完成此 IME 的最简单方法是在您位于错误目录(此处看起来像 /root/)而不是 bundle install --system 时发出 bundle install。 (尽管就我个人而言,我从不这样做,总是将 gems 安装到特定项目的目录中。)
  • 我在/opt/redmine 上尝试了bundle pristine,但它不起作用TT
  • 您也可以尝试删除(或移开)您的 /opt/redmine/vendor/cache/ruby 目录并使用 bundle install 重新安装 gems
猜你喜欢
  • 2023-01-13
  • 2016-04-04
  • 2023-03-08
  • 2021-02-20
  • 1970-01-01
  • 2021-06-24
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多