スタンドアロン環境で動くRailsアプリインストール(Rails3編)

Rails3からパッケージ管理にBundlerが使われるようになったので、依存するGemとか気にせずに「bundle install」一発で済むようになった。

これはすごく便利なんだけど、非インターネット接続環境でインストールしたい場合には、ちと工夫がいる。Gemfileに書かれているgemファイルが他の複数のgemにも依存してたりするので、そういう依存関係を把握して、必要なgemをすべてローカルに用意しなければならない。さらに、アプリのバージョンアップとかプラグインの追加にともなって、gemのバージョンも上げたりしないとならないので、管理も面倒になり、スタンドアロンインストールは大変である。

そういったのを効率よく行うのに、継続的デリバリーとも絡んでくるんだけど、インターネット接続可能なビルドサーバを用意し、ビルドサーバで必要なgemをパッケージ化するように仕込んでおくのがベター。ビルドサーバ上のRailsディレクトリで


bundle package
みたいに実行してあげると、RAILS_ROOT/vendor/cacheに、依存するGemを含めて必要なgemファイルを全て作成してくれる。動作しているアプリでパッケージ化を行うので、gemファイルの過不足・バージョン不一致などはないはず。

そして、vendorディレクトリなり、/vendor/cache以下のすべてのgemファイルなりをアーカイブして、デプロイ先のサーバに転送してあげればよい。

デプロイ先のサーバでは、


bundle install --local
みたいに実行すると、RAILS_ROOT/vendor/cache以下のgemファイルを使ってBundleインストールしてくれる。

ようするに、bundle packageコマンドと、localオプションを組み合わせるってだけなんだけど、役に立つ機会があるかもしれない。実際の環境ではまだ試してないので、個人的メモでした。