Redmine 无法在带有 Passenger 的 apache2 上运行:nokogiri 的库版本不兼容

Redmine 无法在带有 Passenger 的 apache2 上运行:nokogiri 的库版本不兼容

我想在我的电脑上安装 redmine。我使用了http://redmine.org/在我的 PC 上部署 redmine。安装 ruby​​、附加软件包和 redmine 后,我想为 redmine 配置 apache2。但在访问应用程序时遇到问题:

Message from application: incompatible library version - /opt/redmine/.rvm/gems/ruby-2.3.3/gems/nokogiri-1.7.2/lib/nokogiri/nokogiri.so

我已经通过 rvm 安装了 ruby​​ on rails:

oleg@oleg-VirtualBox ~ $ ruby -v
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]
oleg@oleg-VirtualBox ~ $ rails -v
Rails 4.2.8

安装配置libapache2-mode-passenger如下/etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
  PassengerUserSwitching on 
  PassengerUser redmine
  PassengerGroup redmine
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>

并配置redmine:

<VirtualHost *:80>
    DocumentRoot /var/www/html/redmine/
    ServerName redmine.local

    <Directory /var/www/html/redmine/>
        PassengerResolveSymlinksInDocumentRoot on
        AllowOverride all
        Options -MultiViews
        Options FollowSymLinks
        RailsBaseURI /redmine
    </Directory>
</VirtualHost>

Apache 错误日志:

[ 2017-07-04 13:53:21.9413 1661/7f51d8495700 age/Cor/App/Implementation.cpp:304 ]: Could not spawn process for application /opt/redmine/redmine: An error occurred while starting up the preloader.
  Error ID: 28c6ac21
  Error details saved to: /tmp/passenger-error-GYyEzF.html
  Message from application: incompatible library version - /opt/redmine/.rvm/gems/ruby-2.3.3/gems/nokogiri-1.7.2/lib/nokogiri/nokogiri.so (LoadError)
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/nokogiri-1.7.2/lib/nokogiri.rb:32:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/nokogiri-1.7.2/lib/nokogiri.rb:32:in `rescue in <top (required)>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/nokogiri-1.7.2/lib/nokogiri.rb:28:in `<top (required)>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-3.2.2/lib/roadie/inliner.rb:2:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-3.2.2/lib/roadie/inliner.rb:2:in `<top (required)>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-3.2.2/lib/roadie.rb:29:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-3.2.2/lib/roadie.rb:29:in `<top (required)>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-rails-1.1.1/lib/roadie/rails.rb:6:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-rails-1.1.1/lib/roadie/rails.rb:6:in `<top (required)>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-rails-1.1.1/lib/roadie-rails.rb:1:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/roadie-rails-1.1.1/lib/roadie-rails.rb:1:in `<top (required)>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler/runtime.rb:82:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler/runtime.rb:82:in `block (2 levels) in require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler/runtime.rb:77:in `each'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler/runtime.rb:77:in `block in require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler/runtime.rb:66:in `each'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler/runtime.rb:66:in `require'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/bundler-1.15.1/lib/bundler.rb:108:in `require'
  /opt/redmine/redmine-3.3.4/config/application.rb:5:in `<top (required)>'
  /opt/redmine/redmine-3.3.4/config/environment.rb:2:in `require'
  /opt/redmine/redmine-3.3.4/config/environment.rb:2:in `<top (required)>'
  config.ru:3:in `require'
  config.ru:3:in `block in <main>'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/rack-1.6.8/lib/rack/builder.rb:55:in `instance_eval'
  /opt/redmine/.rvm/gems/ruby-2.3.3/gems/rack-1.6.8/lib/rack/builder.rb:55:in `initialize'
  config.ru:1:in `new'
  config.ru:1:in `<main>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `eval'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:110:in `preload_app'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:156:in `<module:App>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>'
  /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>'


[ 2017-07-04 13:53:21.9466 1661/7f51d3fff700 age/Cor/Con/CheckoutSession.cpp:285 ]: [Client 1-1] Cannot checkout session because a spawning error occurred. The identifier of the error is 28c6ac21. Please see earlier logs for details about the error.

文件nokogiri.so存在于文件夹中。

如果我运行 rails 服务器,redmine 就会启动并运行良好。

有人知道如何解决这个问题吗?

答案1

我不知道 Passenger 启动了哪个版本的 Ruby,但我怀疑系统 Ruby(v2.3.1)和 RVM Ruby(v2.3.3)之间存在冲突。

如果您查看 的输出ruby -v,您将得到ruby 2.3.1p112。但是您发布的日志文件具有以下路径:.../.rvm/gems/ruby-2.3.3/。所以我认为rails直接运行是可行的,因为您使用系统 gem,但是当您运行 Passenger 时,它使用系统 Ruby(每个PassengerDefaultRuby),但不知何故它会尝试加载不兼容的 gem。我建议回溯您的步骤并在系统 Ruby 和 RVM 之间进行选择。如果您已遵循某些安装指南,请将其添加到您的问题中。

如果您想使用系统 Ruby,请尝试删除/opt/redmine/.rvm。如果您遇到依赖项问题,则可以使用安装它们bundle install --deployment,因此它将包含在 Redmine 的目录中(请参阅部署模式)。确保 Passenger 所属的用户帐户对 中的所有文件具有读取权限/opt/redmine

PasengerRuby或者,你可以使用配置选项指示 Passenger 使用不同的 Ruby 和 Redmine ,请参阅https://www.phusionpassenger.com/library/deploy/apache/deploy/ruby/

答案2

您考虑过使用 Docker 吗?我看您运行的是虚拟机,如果您能考虑使用 Docker,我想您会受益匪浅。

什么是docker

Docker 是全球领先的软件容器平台。开发人员使用 Docker 消除与同事协作编写代码时出现的“在我的计算机上工作”问题。操作员使用 Docker 在隔离的容器中并行运行和管理应用程序,以获得更好的计算密度。企业使用 Docker 构建敏捷的软件交付管道,以更快、更安全、更自信地为 Linux 和 Windows Server 应用程序交付新功能。

你为什么要使用它?

看起来有点复杂,但一旦你掌握了窍门,就会发现其实很简单。主要是镜像/容器和服务的构建和架构设计,一开始很难做好,但如果你只是使用 Docker 社区提供的库存镜像,你就可以取得很大进展。

我最近尝试过Redmine我自己只使用 Docker,因为当你遇到这类问题时,它更容易保持操作系统的干净。我在主笔记本电脑上运行 Arch Linux,我经常遇到旧版本被淘汰且无法从平均房颤

这个想法是,你获取Docker Redmine 镜像(或自行构建),设置一个docker-compose.yml 或者运行two commands:首先启动您的 SQL 服务器(无论它是什么),然后再启动运行 Redmine 的服务器(docker run -d --name some-redmine redmine)。这些步骤记录在图像页面上。

其他需要注意的事项是如何处理持久数据(如数据库),这取决于您的设置。我目前不确定我的设置文件在哪里,但如果我找到它们,我会将它们添加到这里。

相关内容