古いバージョンのRailsアプリを動かす方法
投稿者 おおかゆか
1年以上前に作ったRailsアプリを動かそうと思って、サーバに入れてみたものの実行してみたらエラーが頻出。
作った当時のRailsはバージョンが1.2.3で、あれから怒涛のようにバージョンが更新され、現在の安定版の最新バージョンは2.2.2。まあメジャーバージョン番号が上がってるんだから、そのままで動かなくても文句を言う筋合いじゃない。
ただサーバにはgemでRailsのバージョン2.0.2がインストールされている。これに影響を及ぼさずにこのアプリを動かすにはどうすればいいか?
何度かチャレンジして挫折していたのだが、人に聞いたらあっさり解決したので、忘れないうちにここに書いておくことにする。
OSはUbuntu 8.04 LTS ‘Hardy’。gemは既にインストールされているものとする。
そこにRailsのバージョン1.2.3で作られたアプリが動作する環境を作る。
まずはgemでRailsのバージョン1.2.3をインストールする。
すでに同じくgemによって2.0.2がインストールされているわけだが、そこに古いバージョンをインストールしても何ら問題ない。現在のバージョンのファイルが上書きされるわけではなく、別のディレクトリにインストールされるためだ。
具体的には、/var/lib/gems/1.8/gems/ 配下に rails-2.0.2/ と rails-1.2.3/ が共存することになる。Railsに付属するActiveRecordやその他のパッケージも同様。
そしてこの状態では指定しない限り、より新しいバージョンのものが優先して実行されるので、普通に“rails”コマンドを叩けばバージョン2.02のほうが実行されることになる。
これを実行すると、1.2.3のRailsがインストールされる。ネットが混んでいると失敗することがあるが、そのときはくじけずリトライ。
そして、該当のRailsアプリを適当な場所に展開。ここでは /var/www/ に myapp というアプリを展開したとする。
$ rake –require=rubygems/gem_runner rails:freeze:gems VERSION=1.2.3
これでオッケー。拍子抜けするほど簡単。
/var/www/myapp/vendor/rails/ 配下にバージョン1.2.3のRailsとそれに対応した各種パッケージがインストールされ、以降はアプリを実行すると /var/lib/gems/ 配下のRailsではなくこちらが使用されるようになる。
実際にアプリを実行してみると、とりあえず一応は動くようになった。
厳密には、なぜか view/layouts/ 配下の頭に「_(アンダーバー)」がついたパーシャルファイルが「render (:partial => "パーシャルファイル")」で呼べなくてTemprateErrorになったのだが、各ディレクトリにシンボリックリンクを張りまくるという力技で解決した。
なぜこんなことになるかは不明。まあ結局は動いたんだからいいか。


















