Rails 3に慣れると色々めんどくさいRails 2ですが、古いアプリケーションをすぐに移行するわけにもいきません。
今回は、Ubuntu 8.04 Serverで、Rails 2.0.2を動かす必要がありました。
また、諸々の事情から、Passengerは使えず、旧環境で動いていたのはmod_fcigdでした。
普段はRVMでRubyを入れるのですが、mod_fastcgiやfcigdでRVMをうまく設定できなかったので、aptでrubyを入れています。
他に動いているアプリの都合上、ruby 1.8.6を維持します。
さて、まずは素直に
[bash]
$ ruby -v
1.8.6
$ gem -v
0.9.2
$ gem install rails -v=2.0.2
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 302
[/bash]
なにやらRemoteSourceExceptionが出てしまいました。
Gemのバージョンが古いと発生するようです。
[bash]
$ gem update --system
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 302
$ gem install rubygems-update
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 302
[/bash]
ダメですね。
仕方ないので、wgetで落としてくることにします。
http://rubyforge.org/projects/rubygems/から、適当なバージョンのrubygemsをダウンロードします。
いくつか試したところ、
1.1.1 : Gem::RemoteSourceExceptionが発生して無意味
1.4.2 : OK!
1.5.0 : setup.rbを実行すると、(A)のエラーが発生
1.8.5 : setup.rbを実行すると、(B)のエラーが発生
となったので、ruby 1.8.6で使うにはrubygems 1.4.2が良さそうです。
(A)
./lib/rubygems/custom_require.rb:31:in `require': undefined method `end_with?' for "no such file to load -- Win32API":String (NoMethodError)(B)
./lib/rubygems.rb:334: warning: parenthesize argument(s) for future version
./lib/rubygems.rb:511: warning: parenthesize argument(s) for future version
./lib/rubygems/dependency_list.rb:8:in `require': ./lib/rubygems/deprecate.rb:53: syntax error, unexpe
cted ',', expecting '|' (SyntaxError)
define_method name do |*args, &block| # TODO: really works on 1.8.7?
^
./lib/rubygems/deprecate.rb:54: syntax error, unexpected tCONSTANT, expecting '}'
./lib/rubygems/deprecate.rb:63: syntax error, unexpected kEND, expecting '}'
./lib/rubygems/deprecate.rb:68: syntax error, unexpected kEND, expecting '}' from ./lib/rubygems/dependency_list.rb:8
from ./lib/rubygems.rb:29:in `require'
from ./lib/rubygems.rb:29
from setup.rb:27:in `require'
from setup.rb:27
[bash]
$ wget http://rubyforge.org/frs/download.php/73882/rubygems-1.4.2.tgz
$ tar zxvf rubygems-1.4.2.tgz
$ cd rubygems-1.4.2
$ ruby setup.rb
[/bash]
しかし今度は別のエラーです。
[bash]
$ gem -v
/usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError)
[/bash]
この場合、/usr/bin/gem1.8を実行してみましょう。
古いgemが/usr/bin/gemで、新しいgemが/usr/bin/gem1.8になっています。ややこしいのでgem1.8をgemにします。
[bash]
$ cd /usr/bin
$ mv gem gem.old
$ ln -s gem1.8 gem
$ gem -v
1.4.2
$ gem install rails -v=2.0.2
[/bash]
これでようやく、インストールすることができました!
ちなみに、RAILS_ENVを設定する際、mod_fastcgiとmod_fcigdで記法が異なります。
[text]
# mod_fastcgiの場合、
SetEnv RAILS_ENV production
# mod_fcigdの場合
DefaultInitEnv RAILS_ENV production
[/text]