【问题标题】:Passenger and rbenv issue - incompatible library version乘客和 rbenv 问题 - 库版本不兼容
【发布时间】:2019-09-04 08:28:48
【问题描述】:

最近我从 RVM 搬到了 Rbenv。我用passengernginx 运行了一堆不同的rails 应用程序(每个都有不同的ruby 版本)。 但是,我在尝试加载两个应用程序时遇到错误:

/user_folder/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': incompatible library version - /usr/local/Cellar/passenger/6.0.2_1/libexec/buildout/ruby/ruby-2.3.3-x86_64-macosx/passenger_native_support.bundle (fatal)
    from /user_folder/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/Cellar/passenger/6.0.2_1/libexec/src/ruby_supportlib/phusion_passenger/native_support.rb:427:in `load_native_extension'
    from /usr/local/Cellar/passenger/6.0.2_1/libexec/src/ruby_supportlib/phusion_passenger/native_support.rb:103:in `load_from_buildout_dir'
    from /usr/local/Cellar/passenger/6.0.2_1/libexec/src/ruby_supportlib/phusion_passenger/native_support.rb:39:in `try_load'
    from /usr/local/Cellar/passenger/6.0.2_1/libexec/src/ruby_supportlib/phusion_passenger/native_support.rb:50:in `start'
    from /usr/local/Cellar/passenger/6.0.2_1/libexec/src/ruby_supportlib/phusion_passenger/native_support.rb:443:in `<top (required)>'

其他应用程序运行良好,而当我使用 webrick(独立)时,这些应用程序运行良好。但由于某种原因,我在使用 passenger 时遇到了问题。

我不确定这是否是巧合,但我遇到问题的两个应用程序都在运行 ruby​​ v2.3.3

知道发生了什么吗?

【问题讨论】:

  • 您在切换到rbenv 后是否重新安装了 ruby​​ gem?上述问题可能是由于 ruby​​ gemset 路径不匹配而引发的。
  • @UdAY 我实际上运行了一个gem pristine --all。然而,在这一切之后,我删除了 rbenv 并回到了 rvm 并且问题仍然存在。所以这似乎根本与 ruby​​ 版本管理器无关。有什么想法吗?

标签: ruby-on-rails ruby nginx passenger rbenv


【解决方案1】:

你应该删除 rvm

这个post explains how to remove rvm,另外还有一个危险的,但是yet effective rvm implode script

您收到的输出不是来自rbenv,而是来自rvm

build-native-support. [passenger_native_support.bundle] trying to compile for the current user and Ruby interpreter... (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable) Compilation successful. The logs are here: /var/folders/_n/pb7r0l3x4kjgcvbdxj30nyn00000gn/T/passenger_native_support-142p5a1.log [passenger_native_support.bundle] successfully loaded.

这可能是由不同的问题引起的,我会经历rvm 删除和rbenv 安装的整个过程。

rbenvrvm 使用环境变量来拦截您的命令。

您的系统中没有passengerpassenger-config 二进制文件$PATH(这是您的home 目录中的文件夹列表),passenger 二进制文件是从rbenv 和存储在.rbenv/&lt;ruby-version&gt; 文件夹中。

ruby 的每个版本都有独立的依赖项。

rbenv 拦截您的命令 (passenger-config) 并根据您设置的 ruby-versionlocally 运行正确的 binary (.rbenv/&lt;ruby-version&gt;/gems/passenger/passenger-config)。

rvm 可能使用类似的方法,但它与rbenv 不兼容。

因此,您需要检查 ~/.bash_profile~/.bashrc 或任何其他终端配置配置文件设置中的 rvm 环境变量并将其删除。

正确安装rbenv 后,运行command line interface 命令passenger-config

passenger-config build-native-support

还可以考虑查看Passenger + Nginx installation instructions

【讨论】:

  • 这对我不起作用。而且我需要乘客使用 Nginx 运行,我对独立版本不感兴趣。不过谢谢!
  • @ArielScherman passenger with nginx installation instructions,一旦你安装了 gem,passenger-config 应该在你的终端全局可用,你可以运行build-native-support。请输出运行这些命令的结果
  • 我已经尝试过了,并且在运行build-native-support 时收到了这条消息。 [passenger_native_support.bundle] trying to compile for the current user and Ruby interpreter... (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to disable) Compilation successful. The logs are here: /var/folders/_n/pb7r0l3x4kjgcvbdxj30nyn00000gn/T/passenger_native_support-142p5a1.log [passenger_native_support.bundle] successfully loaded. 但是还是不行(我都重启了))
  • @ArielScherman 您的问题是由于未正确删除 rvm 并更新您的 bash_profile 环境变量引起的。我更新我的答案
【解决方案2】:

您的 ruby​​ 2.3.3 环境中的某些内容已损坏。

尝试“gem卸载乘客”,按照提示卸载所有版本(如果有)。然后安装乘客gem。然后希望您能够摆脱这个问题。

只是为了确保,请确保您已在相应的虚拟主机条目处将passenger_ruby 设置为2.3.3 路径。

【讨论】:

  • 谢谢,但它不起作用。 passenger_ruby 正确设置为 2.3.3。我有另一个项目使用不同的 ruby​​ 版本运行良好,问题似乎只适用于使用 ruby​​ 2.3.3 的项目。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 2023-04-07
  • 2016-10-12
  • 1970-01-01
  • 2021-08-02
  • 2023-03-31
  • 2023-03-16
相关资源
最近更新 更多