Rails无法加载此类文件 - openssl(LoadError)

时间:2016-02-25 20:17:50

标签: openssl rubygems bundler homebrew

我有一个Rails 4.0.2应用程序,我正在升级到Rails 4.2。我完全按照migration guide。我在每一步都运行了迁移rake任务,我还运行了bundle / bundle更新来更新我的依赖项。作为该过程的一部分,我还必须从Ruby 2.0.0升级到2.3.0。

当我尝试启动rails服务器时,我得到以下输出:

/Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/activesupport-4.2.5.1/lib/active_support/key_generator.rb:2:in `require': cannot load such file -- openssl (LoadError)
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/activesupport-4.2.5.1/lib/active_support/key_generator.rb:2:in `<top (required)>'
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/railties-4.2.5.1/lib/rails/application.rb:5:in `require'
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/railties-4.2.5.1/lib/rails/application.rb:5:in `<top (required)>'
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/railties-4.2.5.1/lib/rails.rb:11:in `require'
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/railties-4.2.5.1/lib/rails.rb:11:in `<top (required)>'
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/railties-4.2.5.1/lib/rails/commands/server.rb:4:in `require'
from /Users/ACIDSTEALTH/.gem/ruby/2.3.0/gems/railties-4.2.5.1/lib/rails/commands/server.rb:4:in `<top (required)>'
from /Users/ACIDSTEALTH/Dropbox/Work/firmplay/config/boot.rb:5:in `require'
from /Users/ACIDSTEALTH/Dropbox/Work/firmplay/config/boot.rb:5:in `<top (required)>'
from bin/rails:3:in `require_relative'
from bin/rails:3:in `<main>'

我尝试了以下内容,但都没有取得任何成功:

  1. 我跑了brew install openssl。安装openssl。没有骰子。
  2. brew updatebrew doctor。这导致我完成了卸载和重新安装brew的整个循环。与openssl一起重新安装brew。仍然没有运气。同样的错误。
  3. 尝试再次将应用程序降级为Ruby 2.0,但这在Gemfile中引发了一些依赖性问题,因此它不是一个选项。
  4. 尝试gem install openssl,但失败了:

    错误:执行gem时...(Gem :: Exception)     无法要求openssl,安装OpenSSL并重建ruby(首选)或使用非HTTPS源

  5. 我整天都在敲打键盘。我在此问题上找到的有限资源都是专为使用rvm的用户量身定制的。我尝试安装rvm,但这导致了另外一系列问题,迫使我最终从我的系统中删除rvm及其所有痕迹。

    我的设置: OS 10.11.3 Xcode(最新发布) iTerm2 / w ZSH 自制(最新) 用于管理红宝石的Chruby和ruby-install 从Ruby 2.0.0上的Rails 4.0.2迁移到Ruby 2.3.0上的Rails 4.2.5。

    更新

    我在解决这个方面取得了一些进展,但我必须承认,我对这个问题的根源开始时感到十分愚蠢。我运行ruby-install ruby-2.3.0 — --with-openssl-dir=/usr/local来重新编译Ruby。重启我的shell,这次我能够重新安装openssl,但我必须做sudo gem install openssl。从这里我终于能够启动我的rails服务器了。我仍然对这里发生的事感到困惑。

1 个答案:

答案 0 :(得分:0)

只需发布记录。

进行双重升级可能非常复杂。一般来说,在阶段进行更容易,并且在移动到下一阶段之前检查没有回归。

最初的升级方法基本上是升级Rails,然后,当Rails抱怨Ruby版本时,升级Ruby。这是艰难生活的秘诀。这就是我们通常需要重新开始的地方。

升级语言版本可能非常困难。由于Ruby 2.0的功能已经变得非常好,所以它通常不是一件容易的事情,但更好的是要谨慎。您的代码可以使用一个版本,然后使用下一个版本将某处打开。这是一个好的测试套件的帮助,以及更多的演进验证或验证工具。所有这些听起来都有点过头了,但是考虑到像{2.1}这样的东西出现在Ruby 2.1中,并且很多宝石可能已经使用过了......

一旦目标Ruby版本运行代码而没有回归(尽可能多的时间来检查),那么升级项目核心库(这里是Rails)要容易得多。可能出现问题的范围突然变小了。

现在你必须重新启动你的shell来获得OpenSSL库的正确“链接”。很难说现在发生了什么,但它可能是一个权限问题,或者是库安装程序中的一个大问题。在这里,许多事情同时发生,并且通常更容易缩小范围并重新开始。