Rails本体の、testを実行する(1)

さて、急な話ですが少し古い Rails の test を実行してみたいと思います。
なんで古い Rails なのかって!?そりゃ、大人の事情ってもんです。
あと、なんで test するのかって!?いや〜、 Rails にセキュリティパッチだけを適用したいことってあるじゃないですか、そのときに test せずに導入ってわけにはいきませんよね。
それでは、いってみよ〜♪

ダウンロード

さて、対象の Rails は 3.0.3 です。GitHub からソースコードをダウンロードして、作業用のブランチを作成します。

$ mkdir -p ~/work/rails
$ cd ~/work/rails
$ git clone git@github.com:rails/rails.git
$ cd rails
$ git co -b takaokouji/v3.0.3 v3.0.3

必要なソフトウェアのインストール

nokogiriの警告がうるさいのでlibxml2とlibxsltをインストールしておく。あと、DB関係はあとでまとめてインストールする予定。

$ sudo port install libxml2 libxslt

Gemfile の修正

さて、ここからが問題です。古い Rails の test は簡単には実行できません。原因の 1 つは、Rails がリリースされたあとで関連する gem のバージョンが上がったためです。まずは、Gemfile を修正して、関連する gem のバージョンをリリース当時のものに固定します。
Rails のリリース当時のバージョンは、 RubyGems.org (http://rubygems.org/) で調べます。
Rails 3.0.3 のリリースは、2010/11/16 です。Rails の Gemfile に記述されている gem のその頃のバージョンの一覧を以下に挙げます。(JRubyOracle関係を除く。また、Gemfileに >= versionといった記述があるものは、その version をそのまま記述。)

  • "rake", "0.8.7"
  • "mocha", "0.9.8"
  • "rdoc", "2.5.10"
  • "horo", "1.0.2"
  • "faker", "0.3.1"
  • "rbench", "0.2.3"
  • "addressable", "2.2.2"
  • "memcache-client", "1.8.5"
  • "text-format", "1.0.0"
  • "system_timer", "1.0"
  • "ruby-debug", "0.10.3"
  • 'ruby-prof', "0.9.2"
  • "ruby-debug19", "0.11.6"
  • 'json', "1.4.6"
  • 'yajl-ruby', "0.7.8"
  • "nokogiri", "1.4.3.1"
  • "sqlite3-ruby", "1.3.1"
  • "pg", "0.9.0"
  • "mysql", "2.8.1"
  • "mysql2", "0.2.6"

上の情報を元に Gemfile を修正したら、bundle の実行...といきたいところですが、ここで要注意。実は、このときの RailsRuby 1.8 系でしか test できません。bundle を実行する前に rvm などをつかって Ruby を 1.8 系に切り替えておきます。

$ rvm use ruby-1.8.7-p358
$ rvm gemset create rails-3.0.3    
$ rvm gemset use rails-3.0.3
$ rvm rvmrc create
$ vi .rvmrc
(以下の箇所を修正)
environment_id="ruby-1.8.7-p358@rails-3.0.3"
$ cd ../
$ cd rails
====================================================================================
= NOTICE                                                                           =
====================================================================================
= RVM has encountered a new or modified .rvmrc file in the current directory       =
= This is a shell script and therefore may contain any shell commands.             =
=                                                                                  =
= Examine the contents of this file carefully to be sure the contents are          =
= safe before trusting it! ( Choose v[iew] below to view the contents )            =
====================================================================================
Do you wish to trust this .rvmrc file? (/Users/kouji/work/rails/rails/.rvmrc)
y[es], n[o], v[iew], c[ancel]> y

RubyGems のバージョンダウン

次は RubyGems のバージョンダウンです。RubyGems は 1.3.7 でないと警告がでまくってうっとうしいです。

$ gem install rubygems-update -v 1.3.7
$ update_rubygems

ここで一旦テスト

まだまだ作業は続きますが、とりあえず test の一部は実行できるようになっているので実行してみます。

$ cd railties
$ rake test
(以下、想定する実行結果)
rake/gempackagetask is deprecated.  Use rubygems/package_task instead
Loaded suite test/application/configuration_test
Started
.......................
Finished in 40.915443 seconds.

23 tests, 28 assertions, 0 failures, 0 errors
(省略)
Loaded suite test/script_rails_loader_test
Started
...
Finished in 0.004202 seconds.

3 tests, 3 assertions, 0 failures, 0 errors

うん、きれいな感じですね。(最初のrake/gempackagetaskの警告が気になるけど、これはしょうがないと思う。)

今日はここまでです。現状を https://github.com/takaokouji/rails/tree/takaokouji/v3.0.3 に push しておきました。気になる方はご覧あれ〜♪

(つづく...)

--- 参考URL

--- PR広告
記事を読んでくださり、ありがとうございます。もしよろしければ、この記事の著者が提供している無料のサービス「かくってる?」をお試しください。