Ruby gems 的问题(坏了?)试图让指南针在 npm 中工作

Posted

技术标签:

【中文标题】Ruby gems 的问题(坏了?)试图让指南针在 npm 中工作【英文标题】:Issue with Ruby gems (broken?) trying to get compass to work in npm 【发布时间】:2015-02-11 10:20:44 【问题描述】:

我不是 Ruby 专家,但我想弄清楚发生了什么,因为我试图让指南针在节点应用程序中工作,但我的 Ruby 似乎坏了。打字:

ruby --version

得到我:

ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

我已经安装了 Homebrew,并且之前遇到过 Ruby 版本的问题,但它似乎已安装并且可以正常工作。但是,当我使用 gem 输入请求时,出现此错误:

$ gem -h
Error loading RubyGems plugin "/Users/user_dir/.rvm/gems/ruby-2.1.1@global/gems/executable-hooks-1.3.1/lib/rubygems_plugin.rb": dlopen(/Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method
Referenced from: /Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
in /Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle - /Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle (LoadError)
Error loading RubyGems plugin "/Users/user_dir/.rvm/gems/ruby-2.1.1@global/gems/gem-wrappers-1.2.4/lib/rubygems_plugin.rb": dlopen(/Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method
Referenced from: /Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
Expected in: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib in /Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle - /Users/user_dir/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle (LoadError)
RubyGems is a sophisticated package manager for Ruby.  This is a
basic help message containing pointers to more information.

Usage:
  gem -h/--help
  gem -v/--version
  gem command [arguments...] [options...]

Examples:
  gem install rake
  gem list --local
  gem build package.gemspec
  gem help install

Further help:
  gem help commands            list all 'gem' commands
  gem help examples            show some examples of usage
  gem help platforms           show information about platforms
  gem help <COMMAND>           show help on COMMAND
                               (e.g. 'gem help install')
  gem server                   present a web page at
                               http://localhost:8808/
                               with info about installed gems
Further information:
  http://guides.rubygems.org

我注意到对 openssl 的引用,但在网上找不到任何关于此的问题。

我已经尝试在 npm 和 RVM 和 Homebrew 上安装 compass,所以目前我不知道正在使用哪些版本以及从哪里开始尝试解决问题。

如果您知道问题所在,请告诉我,或者如果您需要有关我的系统的更多信息。

我查看了:“Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)”和 “Error loading RubyGems plugin ,openssl.bundle (LoadError)”。

我没有添加 npm 或节点标签,因为我很确定这是一个 Ruby 问题,但我确实尝试在那里安装指南针,所以将它留在了问题中。

我尝试过修复 RVM、Homebrew 等,但还是坏了。

【问题讨论】:

【参考方案1】:

你在用 brew 吗?

如果是这样,brew updatebrew upgrade 会破坏 Ruby 运行时,这对我来说是导致类似错误的原因。

以下解决了我的问题:

brew rm openssl
brew cleanup openssl
brew install openssl
rvm reinstall ruby
gem install compass

【讨论】:

感谢@1469,我确实将解决方案放在了我的答案的顶部(在~/.rvm/gems/ 中有一个旧版本的ruby 设置为默认值),openssl 修复没有对我不起作用,因为它引用了错误的版本。我没有接受它,因为我真的不明白发生了什么,但它可以在 ATM 上运行,所以我不想惹它。【参考方案2】:

编辑:

我终于发现RVM有一个默认版本,所以每次我安装一个新版本都会恢复到旧版本(我猜这个有错误,这就是我没有注意到版本问题的原因)。

如果你去:

~/.rvm/gems/

顶部会有一个 ruby​​ 版本列表和一个默认文件夹。关注this page 并输入:

rvm --default use 2.1.5

解决了我的问题(目前...)

原文:

我尝试了很多不同的方法,但最终都成功了,我将这个答案分解为我认为可能对结果有贡献的事情列表,因为有很多事情没有奏效。

This answer 我发现的一个 SO 问题引导我走上了这条路。

我重新安装了 ruby​​,但因为答案(1.9.3)中的版本早于 2.1.1p76 我刚输入:

rvm get stable

然后:

rvm reinstall ruby

这让我保持在 2.1.1p76,然后:

rvm gemset pristine

将 gem 升级到 2.4.3

这有点奇怪,但我随后尝试在 NPM 中安装 compass,它工作但仍然无法运行,然后再次检查我的 ruby​​ 版本给了我 2.1.5p273(除非 RVM gemset 原始更新 ruby​​,否则两者之间没有升级。 ..)。 然后我尝试了 SO 答案中的 mygemset 代码,但出现了更多错误,所以我决定只运行

gem install bundler

这似乎行得通,所以我尝试了:

gem install compass

我尝试了很多次,但这次成功了。它安装了 ffi-1.9.6.gem 和 9 个我认为是依赖项的 gem。

NPM 包然后工作了,我目前在 ruby​​ 中没有出现任何错误。

注意:我不会接受这个答案,因为我真的不知道它为什么会起作用,如果你遵循这个请注意我不知道 ruby​​,这只是为了让指南针在 NPM 中工作。

注意:许多答案都将 rbenv 作为包管理器,我想用系统上已有的东西解决这种情况,所以我继续使用 RVM。

【讨论】:

我想补充一下,这仍然没有解决问题,我的系统似乎退步了,我第二天也遇到了同样的问题,不得不再次升级 ruby​​。 在确保我们使用了正确的 rvm (2.1.1) 并将其设置为 --default 之后,以下为我们的团队修复了它:rvm gemset pristine。谢谢! 我也做了没有必须卸载/重新安装,但只需设置默认值。

以上是关于Ruby gems 的问题(坏了?)试图让指南针在 npm 中工作的主要内容,如果未能解决你的问题,请参考以下文章

如何让 ruby​​-prof 忽略 Ruby 核心/标准库/gem 方法?

ruby-gems 常用命令笔记

乘客:无法加载此类文件 ruby​​gems/builder

试图在 gem 中要求 active_support

无法在 gem Devise 中调整控制器,ruby on rails 4

ruby+watir安装指南