【问题标题】:Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)找不到 Ruby 捆绑符号:_SSLv2_client_method (LoadError)
【发布时间】:2014-10-19 00:13:42
【问题描述】:

我正在尝试使用自制软件对 openssl 进行一些更新,但我设法破坏了一切。我现在什么都做不了,这是我尝试进行捆绑安装时得到的:

$ bundle install
/Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in    `require': dlopen(/Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle, 9): Symbol not found: _SSLv2_client_method (LoadError)
Referenced from: /Users/asServer/.rbenv/versions/2.1.2/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/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle - /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/openssl.rb:17:in `<top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/security.rb:11:in `<top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/package.rb:43:in `<top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/dependency_installer.rb:3:in `<top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/installer.rb:2:in `<top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/cli/install.rb:78:in `run'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/cli.rb:146:in `install'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/vendor/thor/command.rb:27:in `run'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/vendor/thor/invocation.rb:121:in `invoke_command'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/vendor/thor.rb:363:in `dispatch'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/vendor/thor/base.rb:440:in `start'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/cli.rb:9:in `start'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/bin/bundle:20:in `block in <top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/friendly_errors.rb:5:in `with_friendly_errors'
    from /Users/asServer/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/bin/bundle:20:in `<top (required)>'
    from /Users/asServer/.rbenv/versions/2.1.2/bin/bundle:23:in `load'
    from /Users/asServer/.rbenv/versions/2.1.2/bin/bundle:23:in `<main>'

【问题讨论】:

  • SSLv2 已损坏,因此代码几乎没有理由使用SSLv2_client_method。您可以打开 Ruby 文件并注释掉对 SSLv2 方法的引用吗?根本原因是/usr/local/opt/openssl/lib中的libssl配置了no-ssl2(但在2014年应该不是问题)。

标签: ruby-on-rails openssl homebrew rbenv


【解决方案1】:

我刚刚在我的系统上修复了一个类似的问题。您需要重新安装 Ruby 2.1.2,它将重新链接到新更新的 SSL。

$ rbenv install 2.1.2
rbenv: /Users/ryan/.rbenv/versions/2.1.2 already exists
continue with installation? (y/N) y
Downloading ruby-2.1.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/f22a6447811a81f3c808d1c2a5ce3b5f5f0955c68c9a749182feb425589e6635
Installing ruby-2.1.2...
Installed ruby-2.1.2 to /Users/ryan/.rbenv/versions/2.1.2

【讨论】:

  • 这是在通过 rvm 全新安装 ruby​​ 1.9.3 后发生的。新 Mac 和旧代码库。我需要不同版本的 openssl 吗?
  • @twelve17 这些错误与无法找到 SSL 库有关,并且 OP 提到他们最近升级了已安装的 openssl 版本。我在相同的升级方案中遇到了同样的问题;我怀疑重新安装会导致针对升级后的库构建 Ruby(找不到旧库)来解决问题。
  • 只是补充一点,如果 boxen 用户遇到这个问题 - 我无法使用上面的命令重新安装 rbenv - 所以我必须使用 rbenv rbenv uninstall 2.1.2 @ 卸载并重新安装 2.1.2 987654324@bundle
  • 优胜美地升级后,我遇到了这个问题。以上工作,但只有在我重定向我的 gcc 之后。 export CC=/usr/bin/gcc欲了解更多信息:here is the github issue from rbenv that helped
  • 如果您使用自制软件安装了 rbenv,您可能还需要 brew upgrade rbenv ruby-build
【解决方案2】:

升级 openssl 后我遇到了类似的问题。我用rvm。我从升级 rvm 开始。

$ rvm get stable

我接下来重新安装了 1.9.3。

rvm reinstall ruby-1.9.3-p545

重新安装后,我跑了:

$ rvm gemset pristine

如果您在恢复 gemset 时看到任何错误,最好的选择是清空 gemset 并重建它。

rvm gemset use mygemset
rvm gemset empty mygemset
gem install bundler
bundle install

如果您有多个 gemset,则必须为每个 gemset 重复这些步骤。

【讨论】:

  • 这对我有用。 rvm 自动开始构建 gemset pristine。
  • 在优胜美地为我工作,我刚刚跑了:rvm get stablervm reinstall ruby-2.0.0
  • 在 Yosomite 上我在安装 ruby​​ 时遇到了问题,因为它无法找到正确的 gcc 版本。我最终得到了CC=/usr/bin/gcc rvm reinstall ruby-1.9.3-p551
  • @MatCarey rvm get stablervm reinstall ruby-2.0.0 也在小牛队工作过。谢谢。
  • 对我有用的是rvm get stable,然后是rvm install ruby-2.0.0-p598(因为我落后于几个补丁版本)。另外,我更新了.ruby-version,运行bundle,并退出了我当前的工作目录(cd ..)并返回到它(cd -),然后成功运行foreman start
【解决方案3】:

在 rvm 下对 1.9.3-p547 有同样的问题

rvm reinstall ruby-1.9.3-p547

Ruby 被重新安装,但无法为应用程序设置 gemset_pristine,因为

libv8 version 3.16.14.3 failed

这就是我首先到达这一点的原因。恶性循环...

更新
检查您的平台版本。 I have for example Darwin 10.8 and that is not listed here。 因此,除非您的 libv8 gem 版本具有适用于您的平台的预编译二进制文件,否则将需要很长时间(很长一段时间)。出去吃晚饭,看电影,放松一下……如果问得够多,也许他们会建立一个二进制发行版……

【讨论】:

  • 我还需要对 ruby​​ 1.9.3 的支持,并且在 Yosemite 10.10.2 上使用 rvmhomebrewxcode v6.1.1。我只用了rvm reinstall ruby-1.9.3-p394;编译新的 ruby​​ 后,RVM 使 gem 保持原始状态,并且没有任何问题。
  • 是的,它基于二进制分发。该链接可以让人们首先检查他们是否会立即得到回应或去冥想!
【解决方案4】:

遇到同样的错误,brew upgrade openssl解决了

【讨论】:

  • 你必须brew link --force openssl吗?
  • @kbrock,不,我没有。
【解决方案5】:

你可能像我一样是个笨蛋,拥有多个 openssl

我在 2.1.2 中遇到了同样的问题,而 Ryan Dlugosz 的出色回答还远远不够。我的问题是我安装了多个版本的openssl(我想我在以前的项目中是通过brew git 安装的)。

我不得不删除 /opt/local/bin/openssl 然后重建 2.1.2。

检查全局 rbenv ruby​​

$ rbenv global
2.1.2

检查openssl

$ which -a openssl
/opt/local/bin/openssl
/opt/local/bin/openssl
/usr/bin/openssl

杀死重复的openssl

$ sudo rm -rf /opt/local/bin/openssl

重建 2.1.2

$ rbenv install -f 2.1.2
Downloading openssl-1.0.1g.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/53cb818c3b90e507a8348f4f5eaedb05d8bfe5358aabb508b7263cc670c3e028
Installing openssl-1.0.1g...
Installed openssl-1.0.1g to /Users/globber/.rbenv/versions/2.1.2

Downloading ruby-2.1.2.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/f22a6447811a81f3c808d1c2a5ce3b5f5f0955c68c9a749182feb425589e6635
Installing ruby-2.1.2...
Installed ruby-2.1.2 to /Users/globber/.rbenv/versions/2.1.2

【讨论】:

    【解决方案6】:

    当根本没有解决问题时,我建议删除RVM。并重新安装 RVM 和 Rails。

    删除 RVM

    How can I remove RVM (Ruby Version Manager) from my system?

    安装 RVM、Rail

    $ curl -L https://get.rvm.io |重击 -s
    $ rvm 稳定
    $ rvm 要求
    $ rvm install 2.0.0 --with-openssl-dir=$HOME/.rvm/usr
    $ rvm 使用 2.0.0 $ gem update --system 2.0.3
    $ gem install rails --version 4.0.5

    【讨论】:

      【解决方案7】:

      rbenv 用户:

      这有助于确保您使用的是正确版本的 ruby​​。如果重新安装 rbenv 或安装新的 ruby​​,请更改为刚刚安装的 ruby​​ 版本:

      $ rbenv 本地 2.1.3

      【讨论】:

        【解决方案8】:

        以防万一:我安装了新版本的 Ruby (2.1.2),并在我的 .ruby-version 文件中引用了旧版本 (2.0.0-p353)

        将我的 .ruby-version 文件更改为 2.1.2 为我解决了这个问题。

        【讨论】:

          【解决方案9】:

          我在升级到 ruby​​ 2.2.2 后遇到了类似的问题。 但是,我的环境有点不同,导致上述解决方案不起作用。

          我正在使用:

          • OSX 优胜美地 (10.10.4)
          • 红宝石
          • ruby 安装
          • openssl(通过自制软件安装)

          以下命令在我的情况下解决了这个问题:

          > sudo ruby-install -r /opt/rubies ruby 2.2.2 -- --with-openssl-dir=/usr/local/opt/openssl
          > gem install bundler
          > bundler install
          

          【讨论】:

            【解决方案10】:

            除了上面的接受答案之外,您可能还必须告诉 rbenv 使用新安装的版本。例如,我在 ~/.rbenv/version 中有旧版本,所以 rbenv 总是使用旧版本。在该文件中手动设置新版本(或通过命令行)应该可以解决问题。

            rbenv install -f 2.1.2
            rbenv versions
            rbenv global 2.1.2 //sets global version to 2.1.2
            

            【讨论】:

            • 如果您遇到 rbenv 无法看到更高版本的问题,就像我认识的某个人所做的那样……请确保您已更新 ruby​​-build。最有可能通过 brew。
            猜你喜欢
            • 2016-03-14
            • 2019-03-08
            • 1970-01-01
            • 2016-11-17
            • 2011-09-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-15
            相关资源
            最近更新 更多