また、バージョン指定物については「可能な限り最新版、ダメだったら少しずつバージョンダウンしてみる」という手法で解決を図っていますので、例えばrspecとrspec-railsはバージョンがずれており、合わせたほうがキモチ良いなーと思いつつそのままになっていたりします。
ちなみに、あたしはクリーンインストールに成功したこの記録に到達するまで、2回のOSリセットと概ね2回のごり押しをやっていまする。だいたい、1回目で破綻しつつ勘をつかんで、2回目+ごり押しでなんとか押し込むことに成功して、3回目できれいに納める、といった感じ。
- rubyのコンパイルで使うものたち。ext/の内容物をコンパイルするためのライブラリ類です。あとでアレが無いコレが足りないとやるのが面倒なので、後々必要になりそうなものをあらかじめ選び、導入要件を調べた結果こうなりました。
-
ncurses ncurses-devel gdbm gdbm-devel openssl openssl-devel zlib zlib-devel readline readline-devel
- Rails運用に使うものたち。DB2種。ほかに使いたい人はそれを。sqliteは概ね最初から入っているはず。
- mysql mysql-server mysql-devel sqlite-devel
- Radiant CMS運用/開発に使うものたち。基本的には開発方面で必要になった気がします。ざっくりXML系ですな。
- libxml2 libxml2-devel libxslt libxslt-devel
- Passenger運用に使うものたち。
- httpd-devel apr apr-devel httpd-devel curl-devel
導入するgem
- Ruby on Rails本体。Rails3はあたしが慣れていないせいかそもそも一般流通しているgemが追従しきれていないのか、色々要らぬトラブルが発生するので当面Rails2でいきます。
- rails -v 2.3.14
- SQLite。これも、最新版(1.3.3)ではエラーになるので。まぁ基本テストで使うものなので多少いい加減でも良いかと。
- sqlite3-ruby -v 1.2.5
- MySQLについては特にひねりはありません。
- mysql
- Radiant CMSの開発環境まわり。運用だけならば不要だったように思います。
- cucumber cucumber-rails database_cleaner webrat
- おなじく、Radiant CMSのうちバージョン指定が必要な物。ちなみに、specぢゃなくてutest使うんだい!という人には不要です。
- rspec -v 1.3.0
- rspec-rails -v 1.3.2
- Radiant CMS本体。Rails2系です。Rails3系は、radiant3だったかと。
- radiant
- Passenger。
- passenger
手順
多少端折っていますが、実際に打ち込んだコマンドのログ。
まずはRubyとRubyGemsのインストール。前提条件として、RPM化するためにcheckinstallが導入済みとなっています。
rubyについてはインストール先のみ、/usr/に変更しています。単なる趣味というか職場環境がそうなっているからというか、まぁそのあたりが理由。
$ sudo yum install ncurses ncurses-devel gdbm gdbm-devel openssl openssl-devel zlib zlib-devel readline readline-devel
Installed:
gdbm.i386 0:1.8.0-26.2.1.el5_6.1
gdbm-devel.i386 0:1.8.0-26.2.1.el5_6.1
gdbm-devel.x86_64 0:1.8.0-26.2.1.el5_6.1
ncurses-devel.i386 0:5.5-24.20060715
ncurses-devel.x86_64 0:5.5-24.20060715
openssl-devel.i386 0:0.9.8e-20.el5
openssl-devel.x86_64 0:0.9.8e-20.el5
readline-devel.i386 0:5.1-3.el5
readline-devel.x86_64 0:5.1-3.el5
zlib-devel.i386 0:1.2.3-4.el5
zlib-devel.x86_64 0:1.2.3-4.el5
Dependency Installed:
e2fsprogs-devel.x86_64 0:1.39-33.el5 keyutils-libs-devel.x86_64 0:1.2-1.el5
krb5-devel.x86_64 0:1.6.1-62.el5 libselinux-devel.x86_64 0:1.33.4-5.7.el5
libsepol-devel.x86_64 0:1.15.2-3.el5 libtermcap-devel.x86_64 0:2.0.8-46.1
Complete!
$ cd ruby-1.8.7-p352
$ ./configure --prefix=/usr/
$ make ; make test
test succeeded
checkinstallでRPM化するにあたり、説明文はyum infoで得られるものをそのまま使います。どうせ個人使用なんで何でも良いといえばそれまでなんですが。
また、checkinstallでは1~4までの項だけを再設定します。Summaryについては同じくyum infoの内容をコピペ。2~3もyumで取ってこれるRPMに合わせることで、あとで入れ替えるときなどに要らぬトラブルが出ないようにします(したつもり)。
$ yum info ruby >description-pak
$ vi description-pak
★Description: の項だけ残して後は削除しておく。
$ sudo /usr/local/sbin/checkinstall
★1~4まで再設定。
1 - Summary: [ An interpreter of object-oriented scripting language ]
2 - Name: [ ruby ]
3 - Version: [ 1.8.7 ]
4 - Release: [ p352 ]
**********************************************************************
Done. The new package has been saved to
/usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p352.x86_64.rpm
You can install it in your system anytime using:
rpm -i ruby-1.8.7-p352.x86_64.rpm
**********************************************************************
$ sudo rpm -ivh /usr/src/redhat/RPMS/x86_64/ruby-1.8.7-p352.x86_64.rpm
Preparing... ########################################### [100%]
1:ruby ########################################### [100%]
gemについては何のひねりもありません。
$ cd rubygems-1.7.2/
$ sudo ruby setup.rb
RubyGems 1.7.2 installed
Ruby on Railsについては、バージョン指定しているところだけが特殊です。何も指定しないと、Rails3が入ってきます。
$ sudo gem install rails -v 2.3.14
ここで、うっかり忘れていたDB関係を入れることに。sqlite3-rubyのみバージョン指定が入ります。
$ sudo yum install sqlite-devel
$ sudo gem install sqlite3-ruby -v 1.2.5
$ sudo yum install mysql mysql-server mysql-devel
Installed:
mysql.i386 0:5.0.77-4.el5_6.6 mysql.x86_64 0:5.0.77-4.el5_6.6
mysql-devel.i386 0:5.0.77-4.el5_6.6 mysql-devel.x86_64 0:5.0.77-4.el5_6.6
mysql-server.x86_64 0:5.0.77-4.el5_6.6
Dependency Installed:
perl-DBD-MySQL.x86_64 0:3.0007-2.el5 perl-DBI.x86_64 0:1.52-2.el5
Complete!
$ sudo gem install mysql
Successfully installed mysql-2.8.1
ここで、Ruby on Railsのテストアプリを作ってみて、welcomeページ程度まで表示できることを確認しておきます。
$ rails testapp
$ cd testapp
$ script/server
★http://<IPアドレス>:3000/にアクセス
Radiant CMS関係。試行錯誤の結果、特に開発環境についてはあらかじめ相性問題を解決したgemを導入しておかないと、勝手気ままに依存関係を解消しようとした結果訳の分からない状態に突入する、という結論になりました。
$ sudo yum install libxml2 libxml2-devel libxslt libxslt-devel
Installed:
libxml2.i386 0:2.6.26-2.1.12 libxml2-devel.i386 0:2.6.26-2.1.12
libxml2-devel.x86_64 0:2.6.26-2.1.12 libxslt.i386 0:1.1.17-2.el5_2.2
libxslt-devel.i386 0:1.1.17-2.el5_2.2 libxslt-devel.x86_64 0:1.1.17-2.el5_2.2
Dependency Installed:
libgcrypt-devel.x86_64 0:1.4.4-5.el5 libgpg-error-devel.x86_64 0:1.4-2
Complete!
$ sudo gem install cucumber cucumber-rails database_cleaner webrat
Successfully installed json-1.6.1
Successfully installed gherkin-2.5.1
Successfully installed term-ansicolor-1.0.6
Successfully installed builder-3.0.0
Successfully installed diff-lcs-1.1.3
Successfully installed cucumber-1.1.0
Successfully installed gherkin-2.4.21
Successfully installed cucumber-1.0.6
Successfully installed nokogiri-1.5.0
Successfully installed mime-types-1.16
Successfully installed json_pure-1.6.1
Successfully installed rubyzip-0.9.4
Successfully installed ffi-1.0.9
Successfully installed childprocess-0.2.2
Successfully installed selenium-webdriver-2.7.0
Successfully installed rack-test-0.6.1
Successfully installed xpath-0.1.4
Successfully installed capybara-1.1.1
Successfully installed cucumber-rails-1.0.5
Successfully installed database_cleaner-0.6.7
Successfully installed webrat-0.7.3
21 gems installed
ここで以下のエラー発生。ただしどうやらドキュメント類が破損したような気配だったので放置。だがしかし、その後のgemも軒並みドキュメント類で「Could not find main page README.rdoc」というエラーが出たようなので、対処したほうがよかったのかも…。
ERROR: While generating documentation for builder-3.0.0
... MESSAGE: Unhandled special: Special: type=17, text=""
... RDOC args: --ri --op /usr/lib/ruby/gems/1.8/doc/builder-3.0.0/ri --title Builder -- Easy XML Building --main README.rdoc --line-numbers lib CHANGES Rakefile README README.rdoc TAGS doc/releases/builder-1.2.4.rdoc doc/releases/builder-2.0.0.rdoc doc/releases/builder-2.1.1.rdoc --title builder-3.0.0 Documentation --quiet
この時点で、「Invalid gemspec in [...]: invalid date format in specification: "2011-09-18 00:00:00.000000000Z"」というエラーが大量に出始めて非常にウザくなります。調べたところどうもgemspecの日付フォーマットが実動作にあっていないものがいくつかあるようです。仕様がDateTimeからDateに変わったか、その逆なのでしょうたぶん。
取り敢えず、一通り入れます。
$ sudo gem install rspec -v 1.3.0
Successfully installed rspec-1.3.0
1 gem installed
$ sudo gem install rspec-rails -v 1.3.2
Successfully installed rspec-rails-1.3.2
Successfully installed rspec-core-2.6.4
Successfully installed rspec-expectations-2.6.0
Successfully installed rspec-mocks-2.6.0
4 gems installed
$ sudo gem install radiant
Successfully installed will_paginate-2.3.16
Successfully installed RedCloth-4.2.8
Successfully installed radiant-0.9.1
3 gems installed
先のInvalid gemspec in …を回復させます。 gem list
等を実行するとエラーがどどっと出るので、それらのgemspecファイルを開き、s.dateに代入されている日付の文字列表現を修正します。具体的には後半の時刻部分を削除。
前:"2011-09-18 00:00:00.000000000Z" →後:"2011-09-18"
もう一度 gem list
等を実行してみて、エラーが無くなればOK…だと思います。今のところ障害は無し。
今回構築した環境では、Radiant CMS関連を実行する際にMutex (NameError)というエラーが出ます。これもたぶん標準ライブラリか何かの構成が変わった…用なのですが、対処療法としては require "thread"
を追記してやることでエラーが解消します。
今回は、書き換えるファイルが最も少なくて済む方法を検討した結果として次の2ファイルに追記しました。どちらも先頭(RAILS_ROOT =の直後行)に追記しています。
- /usr/lib/ruby/gems/1.8/gems/radiant-0.9.1/config/boot.rb
- /usr/lib/ruby/gems/1.8/gems/radiant-0.9.1/lib/generators/instance/templates/instance_boot.rb
テストアプリを作ってみて、Radiant CMSとその開発環境(取り敢えずあたしはextensionを自作したい)が正常動作することを確認します。
$ radiant -d sqlite3 testapp
$ cd testapp
$ env RAILS_ENV=production rake db:bootstrap
$ script/server -e production
★http://<IPアドレス>:3000/にアクセス。
adminログインし、ページ作ったりレイアウト作ったりしてみてDB書き込み含めて稼働することを確認。
$ script/generate extension test_ex
$ script/generate extension_model test_ex xxx
$ pushd vendor/extensions/test_ex/
$ rake spec
★app/models/xxx.rbをちょこっといじってみる
$ rake spec
★xxx.rbをいじった結果が反映されればOK。
$ pushd