古い実行環境を構築する必要が発生した
Xcodeのアップデートや brew upgrade
等を行っていたら、
動いていた Rails アプリが動かなくなったので rbenv
で Rubyからインストールし直した時にハマったメモです。
全然動かなくなったので Gemfile.lock
も削除(リネーム)してから行いました。
環境
プログラム | 動いていたバージョン | 動かなくなったバージョン | 現在のバージョン |
---|---|---|---|
bundler | 1.13.2 | 2.2.3 | 1.13.2 |
Ruby | 2.3.0 | 2.3.0 | 2.3.0 |
Rails | ~> 4.2 | ~> 4.2 | ~> 4.2 |
PostgreSQL | 11 | 13 | 13 |
Xcode | 11.x | 12.3 | 12.3 |
最初の bundler
インストール手順(動かなくなったバージョン)
% rbenv uninstall 2.3.0
% rbenv install 2.3.0
% gem install bundler # ← rubygems を新しくしろとエラーになるので
% gem update --system
% gem install bundler
% cd MY_PROJECT
% bundle install --path vendor/bundle # ← budler のバージョン違いでエラー
ならば 古いbundler
入れれば問題ないだろうとインストール
% gem install bundler -v 1.13.2
やっぱりバージョン違いでエラーなので gem を見てみる
% gem list "^bundler$"
*** LOCAL GEMS ***
% bundler (default:2.2.3, 1.13.2)
下記リンクなどを参考に色々試したのですが、全然解消せず。。。
(というか bundle
が動かなくなりました)
How to change Bundler default version
もう一度 bundler
のインストール(バージョンエラーそのものは解消)
% rbenv uninstall 2.3.0
% rbenv install 2.3.0
% gem install bundler -v 1.13.2 # 最初から指定
% cd MY_PROJECT
% bundle install # ← bundle でのエラーは解消
エラーは解消できた。
bundle install 時の native extension 系(pg 等)のエラーが多発
function 名は違うかもしれませんが、結構多発しました。
原因はXcode 12にするとチェックが厳しくなるようです。
~snip~
Call.c:334:5: error: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
~snip~
古いXcodeにすれば大丈夫という記事が多かったですが下記サイトを参考にコマンドを実行すればビルド出来ました。
Postgresql gem install pg 0.18.4 passes, bundle install fails
bundle config build.pg '-- --with-cflags="-Wno-error=implicit-function-declaration"'
同様にpuma
,nokogiri
,libxml
等もエラーになる場合があるようですが下記のように追加すれば動く様です。
bundle config build.puma '-- --with-cflags="-Wno-error=implicit-function-declaration"'
--
は必要性がちょっと解りませんでしたが。。。
ビルド出来た pg が PostgreSQL にアクセス時にエラー
(抜粋)
Add `gem 'pg'` to your Gemfile and ensure its version is at the minimum required by ActiveRecord
バージョン指定をしていなかったので pg 1.x が入ってしまっていました。
Gemfile を修正
gem 'pg'
↓
gem 'pg', '0.18.4'
Gemfile.lock
があるとはいえ、Gemfile
に書く gem は基本的にバージョン指定しておかないと駄目ですね。。