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

Tot*_*oro 5 ruby macos gem install

我不是一个Ruby专家,但想知道发生了什么,因为我试图让指南针在节点应用程序中运行,但我的Ruby似乎已经坏了.打字:

ruby --version
Run Code Online (Sandbox Code Playgroud)

得到我:

ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
Run Code Online (Sandbox Code Playgroud)

我安装了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
Run Code Online (Sandbox Code Playgroud)

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

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

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

我看了一下:" 找不到Ruby Bundle符号:_SSLv2_client_method(LoadError) "和" 加载RubyGems插件时出错,openssl.bundle(LoadError) ".

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

我曾尝试修复RVM,Homebrew等,但它仍然被打破.

sin*_*469 16

你在用brew吗?

如果是这样,brew updatebrew upgrade打破Ruby运行时,这是导致我类似错误的原因.

以下为我解决了这个问题:

brew rm openssl
brew cleanup openssl
brew install openssl
rvm reinstall ruby
gem install compass
Run Code Online (Sandbox Code Playgroud)


Tot*_*oro 7

编辑:

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

如果你去:

~/.rvm/gems/
Run Code Online (Sandbox Code Playgroud)

顶部会有一个ruby版本列表和一个默认文件夹.点击此页面并输入:

rvm --default use 2.1.5
Run Code Online (Sandbox Code Playgroud)

解决了我的问题(现在...)

原版的:

我尝试了很多不同的东西,但最终还是让它起作用,我把这个答案分解为我认为可能对结果做出贡献的事情清单,因为有很多东西没有用.

这个对我发现的SO问题的回答让我走上了这条道路.

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

rvm get stable
Run Code Online (Sandbox Code Playgroud)

然后:

rvm reinstall ruby
Run Code Online (Sandbox Code Playgroud)

这使我保持2.1.1p76,然后:

rvm gemset pristine
Run Code Online (Sandbox Code Playgroud)

将宝石升级到2.4.3

这一点很奇怪但我接着尝试在NPM中安装指南针并且它仍然无法运行,然后检查我的ruby版本再次给了我2.1.5p273(除非RVM gemset pristine更新了ruby ......之间没有升级) .然后我尝试了SO答案中的mygemset代码,但是出现了更多错误,所以我决定运行

gem install bundler
Run Code Online (Sandbox Code Playgroud)

这似乎有效,所以我试过:

gem install compass
Run Code Online (Sandbox Code Playgroud)

我曾多次尝试,但这一次有效.它安装了ffi-1.9.6.gem和9个宝石,我认为这些是依赖性的.

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

注意:我不会接受这个答案,因为我不知道它为什么会起作用,如果你按照这个意识我不知道ruby,这只是为了让指南针在NPM工作.

注意:许多答案rbenv都是作为一个包管理器,我想用系统中已经存在的内容来解决这种情况,所以我继续使用RVM.