CentOS 5 + Rails 3 + native extensions のメモ

とても今さらな環境の話と 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 を張ってごまかした。

More