2016-02-25 2 views
1

У меня есть приложение Rails 4.0.2, которое я обновляю до Rails 4.2. Я точно следовал за migration guide. На каждом шаге я запускал задачу переноса рейка, и я также запускал пакетное/пакетное обновление для обновления моих зависимостей. В рамках процесса мне также пришлось обновить с Ruby 2.0.0 до 2.3.0.Rails не может загрузить такой файл - openssl (LoadError)

Когда я пытаюсь запустить свой сервер рельсы я получаю следующий результат:

/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. Ran brew update и brew doctor. Это привело меня к целому циклу удаления и переустановки варева. Получил пиво, установленное вместе с openssl. Еще не повезло. Такая же ошибка.
  3. Снова переустановил приложение для Ruby 2.0, но это вызвало некоторые проблемы с зависимостями в Gemfile, поэтому это не вариант.
  4. Пробовал gem install openssl, который потерпел неудачу с:

    ОШИБКА: При выполнении гем ... (Gem :: Exception) Невозможно требовать OpenSSL, установить OpenSSL и восстановить рубин (предпочтительно) или использовать не-HTTPS источников

Я целый день стучал головой по клавиатуре. Какие ограниченные ресурсы, которые я нашел по этой проблеме, специально разработаны для пользователей, которые используют rvm. Я попытался установить rvm, но это привело к еще одному множеству проблем, заставив меня в конечном итоге удалить rvm и все его следы из моей системы.

Моя установка: OS 10.11.3 Xcode (последняя версия) iTerm2/ш ZSH Homebrew (последняя) Chruby и рубиновые установки для управления рубины Перенастройки из Rails 4.0.2 на Руби 2.0.0 Rails 4.2.5 на Ruby 2.3.0.

Update

Я сделал некоторые успехи в решении этого, хотя я должен признать, я чувствую себя совершенно невежественны о том, что источником проблемы должно было начаться с. Я провел ruby-install ruby-2.3.0 — --with-openssl-dir=/usr/local, чтобы перекомпилировать Ruby. Перезагрузили мою оболочку, и на этот раз мне удалось переустановить openssl, но мне пришлось сделать sudo gem install openssl. Отсюда я наконец смог запустить мой сервер rails. Я все еще очень смущен тем, что здесь произошло.

+0

Как насчет обновления Ruby во-первых, тестирование все хорошо, а затем обновление Rails? –

+0

Не уверен, что вы подразумеваете под этим. Я обновил до 2.3.0, и я могу подтвердить, что он работает, открыв irb .... – ACIDSTEALTH

+1

Возможно, попробуйте перекомпилировать Ruby. Возможно, вы скомпилировали его до того, как вы установили openssl. –

ответ

0

Просто разместите для записей.

Выполнение двойных обновлений может быть довольно сложным. В общем, легче перейти на сцену и проверить, нет ли регрессии, прежде чем переходить к следующему.

Первоначальный способ обновления был в основном для обновления Rails, а затем, когда Rails жаловался на версию Ruby, чтобы обновить Ruby. Это рецепт тяжелой жизни. Именно здесь мы, как правило, должны начать все заново.

Модернизация языковой версии может быть довольно сложной. Начиная с Ruby 2.0 все стало намного лучше, чем часто, но все же лучше быть осторожным.Может случиться так, что ваш код работает с одной версией и разрывает где-то со следующим. Именно здесь помогает хороший набор тестов, а также более совершенные инструменты проверки или проверки. Все, что может показаться излишним, но считают, что в Ruby 2.1 появились вещи вроде Array#to_h, и довольно много камней, возможно, уже используют его ...

Как только целевая версия Ruby запускает код без регрессии (столько, сколько позволяет время check), то обновление базовой библиотеки проекта (здесь, Rails) намного проще. Объем возможных проблем внезапно уменьшается.

Теперь вам нужно было дойти до перезагрузки вашей оболочки, чтобы получить правильные «ссылки» на библиотеку OpenSSL. Трудно сказать, что произошло сейчас, но это может быть проблема разрешения, или большая в установщике библиотеки. Опять же здесь, многие вещи происходят одновременно, и часто намного легче уменьшить масштаб и начать все заново.

Смежные вопросы