【问题标题】:Rails cannot load such file -- openssl (LoadError)Rails 无法加载此类文件 -- openssl (LoadError)
【发布时间】:2016-02-25 20:17:49
【问题描述】:

我有一个 Rails 4.0.2 应用程序,我正在升级到 Rails 4.2。我完全遵循了migration guide。我在每一步都运行了迁移 rake 任务,并且还运行了 bundle / bundle update 来更新我的依赖项。作为该过程的一部分,我还必须从 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 源

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

我的设置: 操作系统 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 服务器了。我仍然对这里发生的事情感到困惑。

【问题讨论】:

  • 先升级Ruby,测试一切正常,再升级Rails怎么样?
  • 不确定你的意思。我升级到 2.3.0,我可以通过打开 irb 来确认它可以工作......
  • 也许尝试重新编译 Ruby。你可能在安装 openssl 之前就已经编译过了。
  • 我删除了 Ruby,并根据 this issue 的建议使用 ruby​​-install 运行了 ruby-install -- --with-openssl-dir=/usr/include。还是不行。
  • 我还尝试按照此处列出的步骤来解决安装 gem 时需要 openssl 的错误。没用。 gist.github.com/luislavena/f064211759ee0f806c88

标签: openssl rubygems bundler homebrew


【解决方案1】:

只是为了记录而发布。

进行双重升级可能非常复杂。一般来说,分阶段进行比较容易,并且在进入下一个之前检查是否没有回归。

原来的升级方式基本上是升级Rails,然后,随着Rails抱怨Ruby版本,升级Ruby。这是艰难生活的秘诀。这就是我们通常需要重新开始的地方。

升级语言版本可能非常困难。自从 Ruby 2.0 以来,事情已经变得更好了,这通常是不费吹灰之力的,但还是要小心。您的代码可能会在一个版本上工作而在 somewhere 与下一个版本一起工作。这就是一个好的测试套件以及更先进的验证或验证工具的帮助所在。所有这些听起来都有些矫枉过正,但考虑到像 Array#to_h 这样的东西出现在 Ruby 2.1 中,而且相当多的 gem 可能已经在使用它......

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多