brew upgradeしたらopensslが1.1.1gになってしまいRailsが起動できなくなってしまったとき
参考
Cannot install Ruby versions < 2.4 because of [email protected] dependency
経緯
問題
ruby 2.0.0-p648
で動いているプロジェクトの修正をローカルで試すタイミングで動かないことに気づきました。
$ bundle exec rails s
Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
- brew upgradeでopensslが
1.1.1g
になってしまっていて、今までopenssl1.0.0
で動かしていたプロジェクトが動かなくなってしまっていました。
過程
ちょっと試してこの時点では以下の2点を考えていました。
- ruby 2.0.0-p648
をopenssl 1.1.1g
でどうにか再インストールできないか?
- openssl 1.1.1g
をopenssl 1.0.0
にダウングレードできないか?
試したこと
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/64555220bfbf4a25598523c2e4d3a232560eaad7/Formula/openssl.rb -f
Homebrewで過去のバージョンを使いたい - 2017-01-08
これもダメでした…
rubyの再インストール
rubyの再インストールでなんとかなるような記事もいくつかあったため試したが以下のエラーでインストールすらできない状態に…
The Ruby openssl extension was not compiled.
解決
この時点ではなんとかopenssl 1.1
でruby 2.0.0
をbuildできないか?と考え、
openssl 1.1 ruby 2.0.0 build
でGoogle検索したところ以下の記事を発見し
Cannot install Ruby versions < 2.4 because of [email protected] dependency
結果的に、openssl 1.0
をインストールすることで解決にたどり着きました。
openssl1.0のインストール
rbenv/tap
のリポジトリからopenssl1.0をインストールすることで解決しました。
$ brew install rbenv/tap/[email protected]
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 3 taps (homebrew/core, homebrew/cask and caskroom/cask).
==> Updated Formulae
Updated 13 formulae.
==> Updated Casks
inkscape inkscape
==> Tapping rbenv/tap
Cloning into '/usr/local/Homebrew/Library/Taps/rbenv/homebrew-tap'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
Tapped 1 formula (29 files, 28.6KB).
==> Installing [email protected] from rbenv/tap
==> Downloading https://www.openssl.org/source/openssl-1.0.2t.tar.gz
Warning: Your Xcode (11.0) is outdated.
Please update to Xcode 11.3.1 (or delete it).
Xcode can be updated from the App Store.
==> perl ./Configure --prefix=/usr/local/Cellar/[email protected]/1.0.2t --openssldir=/usr/local/etc/openssl no-ssl2 no-ssl3 no-zlib shared e
==> make depend
==> make
==> make test
==> make install MANDIR=/usr/local/Cellar/[email protected]/1.0.2t/share/man MANSUFFIX=ssl
==> Caveats
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/[email protected]/bin/c_rehash
[email protected] is keg-only, which means it was not symlinked into /usr/local,
because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.
If you need to have [email protected] first in your PATH run:
echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
For compilers to find [email protected] you may need to set:
export LDFLAGS="-L/usr/local/opt/[email protected]/lib"
export CPPFLAGS="-I/usr/local/opt/[email protected]/include"
For pkg-config to find [email protected] you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/[email protected]/lib/pkgconfig"
==> Summary
🍺 /usr/local/Cellar/[email protected]/1.0.2t: 1,787 files, 12.0MB, built in 8 minutes 8 seconds
改めてrubyインストール
openssl
のシンボリックリンクが1.1.1g
を指しているので
openssl -> ../Cellar/[email protected]/1.1.1g
RUBY_CONFIGURE_OPTS
で[email protected]
に変更してインストール
$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/local/opt/[email protected]" rbenv install 2.0.0-p648
Downloading ruby-2.0.0-p648.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p648.tar.bz2
Installing ruby-2.0.0-p648...
WARNING: ruby-2.0.0-p648 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.
ruby-build: use readline from homebrew
Installed ruby-2.0.0-p648 to ~/.rbenv/versions/2.0.0-p648
rbenv: cannot rehash: ~/.rbenv/shims/.rbenv-shim exists
そのあと
bundlerを追加したり…
$ gem install bundler
Fetching: bundler-2.1.4.gem (100%)
ERROR: Error installing bundler:
bundler requires Ruby version >= 2.3.0.
$ gem install bundler -v "1.17.2"
プロジェクトのgemを再インストールしたり…
$ bundle exec rails s
...
~/vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:228:in `require': dlopen(~/vendor/bundle/ruby/2.0.0/gems/mysql2-0.3.20/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
...
---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_BUILD__LIBV8: "--with-system-v8"
BUNDLE_BUILD__THERUBYRACER: "--with-v8-dir=/usr/local/opt/[email protected]"
- BUNDLE_BUILD__MYSQL2: "--with-ldflags=-L/usr/local/opt/openssl/lib"
+ BUNDLE_BUILD__MYSQL2: "--with-ldflags=-L/usr/local/opt/[email protected]/lib"
systemのv8
とgemのlibv8
の互換性がなくてエラーが出たり…
However, your system version of v8 could not be located.
Please make sure your system version of v8 that is compatible
with 3.16.14.15 installed. You may need to use the
--with-v8-dir option if it is installed in a non-standard location
from ~/workspace/project/vendor/bundle/ruby/2.0.0/gems/libv8-3.16.14.15/lib/libv8.rb:7:in `configure_makefile'
from extconf.rb:32:in `<main>'
$ bundle update libv8
...
Fetching libv8 3.16.14.19 (x86_64-darwin-18) (was 3.16.14.15)
Installing libv8 3.16.14.19 (x86_64-darwin-18) (was 3.16.14.15)
...
Fetching therubyracer 0.12.2
Installing therubyracer 0.12.2 with native extensions
...
Bundle updated!
しましたが無事動くようにできました。
反省と今後の課題
-
brew
の仕組みを理解していない
- 公式以外のリポジトリからインストールなど理解していれば先に選択肢として考えられたはず
-
yum
とかで使っているんだからわかる範囲のはずだったのに
- プログラミング言語(今回はインタプリタ型)のbuildの仕組みや動作を理解していない
brew
の仕組みを理解していない
- 公式以外のリポジトリからインストールなど理解していれば先に選択肢として考えられたはず
-
yum
とかで使っているんだからわかる範囲のはずだったのに
Author And Source
この問題について(brew upgradeしたらopensslが1.1.1gになってしまいRailsが起動できなくなってしまったとき), 我々は、より多くの情報をここで見つけました https://qiita.com/zabu/items/357739b92fb2b8239fdb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .