LoginSignup
0

More than 1 year has passed since last update.

posted at

古いRuby環境と古いRailsを動かすのにすこしハマった

古い実行環境を構築する必要が発生した

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 は基本的にバージョン指定しておかないと駄目ですね。。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0