とても今さらな環境の話と Rails 3 が組み合わさってるけど、だからこそのメモ。
まとめ
- 開発環境が Mac OSX 10.5 ( のちに 10.6 )
- staging および production が RHEL 5 ( clone )
で、Rails 3, 特に面倒の多い native extension をどうするかを整理した。最終的には以下のような感じに。
ちなみに DBMS は development, test を SQLite で、それ以外を PostgreSQL で構築している。
できあがったGemfile
gem 'sqlite3-ruby', '< 1.3', :require => 'sqlite3'
gem 'rmagick', '< 2'
group :production do
gem 'pg'
end
※ あとで気づいたけど
bundle install --without=production
すれば development 環境で PostgreSQL は要らなかった…。
OSX 10.5
MacPorts を使って必要なバイナリをインストールしている。
- Ruby 1.8.7
- ImageMagick 6.6.7 + rmagick 1.15.17
- SQLite 3.7.4 + sqlite3-ruby 1.2.1
- PostgreSQL 8.1.x + pg 0.10.1
CentOS 5
もちろん yum 管理。Ruby は endpoint の repository を使って REE を利用。
- Ruby Enterprise Edition ( 1.8.7 via endpoind )
- ImageMagick 6.2.8 + rmagick 1.15.17
- SQLite 3.3.6 + sqlite3-ruby 1.2.1
- PostgreSQL 8.1.x + pg 0.10.1
cf.
補足
Ruby 1.8 なら RMagick 1 を入れられる
- ImageMagick 6.3.0 で新機能が加わった
- RMagick 1 は 6.3.0 の新機能が必要なければ使える
- RMagick 1 は Ruby 1.9 はサポートしていない
ということで production で Ruby 1.8 を使う場合、開発環境では rvm で 1.8 を使うことで RMagick 1 をインストールして動作を合わせることができる。最近の開発環境はたぶん Ruby も ImageMagick も工夫しないと新しいものが入ってしまうので注意が必要かも。
今回のケースでは RHEL 5 clone で欲張って Ruby 1.9 を使おうとしてしまった場合にはややこしいことになっていた。
cf.
Which version of RMagick is right for me? - RMagick Download Page
RMagick は root 権限が必要で bundle install できない?
- /usr/share/RMagick とか /opt/local/share/RMagick にファイルを起きたがるため root 権限が必要で bundle install に失敗する
- でもここでインストールするものはドキュメントだけ
- 一度 bundle じゃなくて yum なりで ImageMagick をインストールする、手でディレクトリ掘るなどして permission 周りの問題を解消しておけば gem については root 権限なしで全部 vendor 以下に入れられる
MacPorts には postgresql-devel ないけど?
エラーメッセージを読んだり pg の README.OS_X を読めば分かるけど
--with-pg-config
で pg_config を指定してやれば ok.
自分の場合は
/opt/local/bin/pg_config -> /opt/local/lib/postgresql81/bin/pg_config
と link を張ってごまかした。