追記
こちらで書いたけど、 RUBY_CFLAGS="-w"
を付与して rbenv install を叩くのが一番ラク、という結論にたどり着いた。
以前の本文
rbenv install
で古いバージョンを入れようとするとこうなる (僕の環境の出力)。
- ロケ地
- MacBookPro 14inch(2021)
- macOS Ventura
- rbenv 1.2.0-48-g6717c62
❯ rbenv install 2.5.1 To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208211932.10900.log' or pass --verbose Downloading openssl-1.1.1s.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa Installing openssl-1.1.1s... Installed openssl-1.1.1s to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1 Downloading ruby-2.5.1.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2 Installing ruby-2.5.1... WARNING: ruby-2.5.1 is past its end of life and is now unsupported. It no longer receives bug fixes or critical security updates. ruby-build: using readline from homebrew ruby-build: using gmp from homebrew BUILD FAILED (macOS 13.0.1 using ruby-build 20221123) Inspect or clean up the working tree at /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208211932.10900.nZn8qM Results logged to /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208211932.10900.log Last 10 log lines: ../.././ext/psych/yaml/api.c:1320:32: warning: implicit conversion loses integer precision: 'long' to 'int' [-Wshorten-64-to-32] return document->nodes.top - document->nodes.start; ~~~~~~ ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ compiling ../.././ext/psych/yaml/emitter.c compiling ../.././ext/psych/yaml/parser.c linking shared-object -test-/string.bundle 5 warnings generated. 1 warning generated. linking shared-object psych.bundle make: *** [build-ext] Error 2
ググればいっぱい情報が出てくるけど、以下のようにすると回避できるとのこと。
2.5.9
2.5.9
なら通る、みたいな話もあるので試してみる。
❯ rbenv install 2.5.9 To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208213315.82591.log' or pass --verbose Downloading openssl-1.1.1s.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa Installing openssl-1.1.1s... Installed openssl-1.1.1s to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.9 Downloading ruby-2.5.9.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.9.tar.bz2 Installing ruby-2.5.9... WARNING: ruby-2.5.9 is past its end of life and is now unsupported. It no longer receives bug fixes or critical security updates. ruby-build: using readline from homebrew ruby-build: using gmp from homebrew BUILD FAILED (macOS 13.0.1 using ruby-build 20221123) Inspect or clean up the working tree at /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208213315.82591.6G9fvh Results logged to /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208213315.82591.log Last 10 log lines: return document->nodes.top - document->nodes.start; ~~~~~~ ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ 26 warnings generated. compiling ../.././ext/psych/yaml/emitter.c linking shared-object zlib.bundle compiling ../.././ext/psych/yaml/parser.c 5 warnings generated. 1 warning generated. linking shared-object psych.bundle make: *** [build-ext] Error 2
だめだった。 このあたり使わないと行けない理由のプロジェクトあるので、素直にオプション渡しとうございます。
別件でめちゃくちゃ忙しいので、バージョンアップは正月にちまちまやるか……。
その後
色々オプションつけたやつで無事 Ruby 2.5 がインストールできた。
❯ export optflags="-Wno-error=implicit-function-declaration"; export LDFLAGS="-L/opt/homebrew/opt/libffi/lib"; export CPPFLAGS="-I/opt/homebrew/opt/libffi/include"; export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig" | rbenv install 2.5.1 To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20221208235613.1669.log' or pass --verbose Downloading openssl-1.1.1s.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa Installing openssl-1.1.1s... Installed openssl-1.1.1s to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1 Downloading ruby-2.5.1.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2 Installing ruby-2.5.1... WARNING: ruby-2.5.1 is past its end of life and is now unsupported. It no longer receives bug fixes or critical security updates. ruby-build: using readline from homebrew ruby-build: using gmp from homebrew Installed ruby-2.5.1 to /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1 NOTE: to activate this Ruby version as the new default, run: rbenv global 2.5.1
Your Ruby version is 2.6.10, but your Gemfile specified 2.5.1
2.6.10 なのは Ventura にバンドルされているバージョン。
上記手順で 2.5.1 をインストール後、 .ruby-version
が存在するディレクトリで bundle install --path vendor/bundle
を実行するも以下のようなエラーになる。
❯ bundle install --path vendor/bundle Your Ruby version is 2.6.10, but your Gemfile specified 2.5.1
あーん?
❯ which bundler /usr/bin/bundler ❯ whereis bundle bundle: /usr/bin/bundle /usr/share/man/man1/bundle.1 ❯ which gem /Users/donbulinux/.anyenv/envs/rbenv/shims/gem ❯ ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [-darwin22]
あーなるほどね、システムの Ruby に付随してる bundler 向いてるのかこれ。
gem はちゃんと rbenv 配下かつ、 .ruby-version
で指定したものになっているので、 bundler
をインストールして rehash すれば治るはず。
❯ gem install bundler -v 1.17.1 Fetching: bundler-1.17.1.gem (100%) Successfully installed bundler-1.17.1 Parsing documentation for bundler-1.17.1 Installing ri documentation for bundler-1.17.1 Done installing documentation for bundler after 5 seconds 1 gem installed ❯ which bundle /usr/bin/bundle ❯ rbenv rehash ❯ which bundle /Users/donbulinux/.anyenv/envs/rbenv/shims/bundle
できたー。
ちなみに、該当のプロジェクトは bundler のバージョンも古くて 1 系なので、 -v
でバージョン指定しないと現行の 2 系が入って以下みたいなエラーで死ぬ。
❯ bundle install --path vendor/bundle Traceback (most recent call last): 2: from /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1/bin/bundle:23:in `<main>' 1: from /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:308:in `activate_bin_path' /Users/donbulinux/.anyenv/envs/rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:289:in `find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)
この時代って Ruby に bundler 付属してなかったんだっけか。 いやぁ焦ったね。
追記
結局この環境の Gemfile.lock、 M1 だとうまいことコンパイルできないバージョンの gem を記載していたので、諦めてオプション無しで Ruby 2.7.6 をインストールした後、 .ruby-verison
の更新と Gemfile.lock を削除して素直にマイナーバージョンアップを実施するなどした。
ユーザ画面向けの機能で依存している Gem の都合で、 Rails 5.x にとどまる必要があって、大改修の風を感じている。
Ruby 3.0 と思ったけど、 Rails 6.0.3 だかあたりからじゃないとサポートしていないはずなので色々衝突してウオオーッ。