まずはWebサーバを起動するところまで成功した。
が、まだデータベースと連携していない。
Railsを使うには、データベースが必要だ。
デフォルトでは sqlite3 なのだが、やはりここはMySQLでいきたい。
というわけでrubyからMySQLを使えるようにする。
% gem install mysql -- --with-mysql-dir=/opt/mysql/mysql-standard-5.0.27-linux-i686-glibc23
MySQLのパスは適宜変更する。
予めMySQLはインストールしておくこと。
そしたら、MySQL用のプロジェクトを作成してみる。
% rails /mnt/var/prog/rails/sample2 -d mysql % cd /mnt/var/prog/rails/sample2
まずはDBの設定を行う。
config/database.yml
development:
adapter: mysql
encoding: utf8
database: rails_development
pool: 5
username: root
password:
socket: /tmp/mysql.sock
ここからがrailsの本領発揮。データベースの作成などは全て自動で行う。
% rake db:create
この段階ではまだrails_developmentスキーマが作成されただけ。
続いて以下を実行。
% script/generate controller home index
exists app/controllers/
exists app/helpers/
create app/views/home
exists test/functional/
create app/controllers/home_controller.rb
create test/functional/home_controller_test.rb
create app/helpers/home_helper.rb
create app/views/home/index.html.erb
色々作成された。index.html.erb っていうのがおそらくメインページだろう。
erb はJSPみたいにhtml中にRubyスクリプトを埋め込めるもの。
% script/server
見た目は特にさっきと何も変わらない。
http://localhost:3000/home/index
これで、indexページにアクセスできる。

…実にしょぼい(笑)。
それもそのはず。index.html.erb を見てみよう。
app/views/home/index.html.erb <h1>Home#index</h1> <p>Find me in app/views/home/index.html.erb</p>
トップページを別のものに変えてみよう。
まずは、現在使っているトップページのファイルをrenameしておく。
% mv public/index.html public/index.html.org
そして http://localhost:3000/ にアクセスしてみる。

こんなエラーが出た。
要するに、/ に対応するファイルが見つからないということだ。
Rails ではこのマッピングを内部DSLを使って解決する。
DSL とは、Domain Specific Language の略。日本語訳すれば、ドメイン特化言語。
config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
多くのフレームワークがXMLで設定を構築するのに対し
Rails ではこのようにRubyスクリプトで構築する。
これは Rails の大きな利点だと思っている。
XMLはあまりに 構文ノイズ が多く、人が読むのには適していない。
内部DSLではRubyのスクリプトがそのまま使える。
ちなみに先ほど紹介した database.yml は、外部DSLを採用している。
これはRubyスクリプトではなく独自の言語による実装。
どちらも一長一短があるが、外部DSLの良い所は言語仕様に捉われず
可能な限りカスタマイズが出来る点にある。そしてRuby以外の言語でも
パーサさえ用意すれば同じフォーマットのファイルを使える。
さて、少し話が脱線したが。
先程アクセスした http://localhost:3000/home/index はどのようにマッピングされているだろうか。
controller = home, action = index となる。
/posts/edit/1 の場合は、controller = posts, action = edit, id = 1 となる。
routes.rb に、以下の一文を追加する。
map.root :controller => "home"
これは、contoller のデフォルト値を home にするという意味。
つまり、
http://localhost:3000/ http://localhost:3000/home/
が同じマッピングとなる。
さらに、homeコントローラはデフォルトのアクションが index なので
以下と同じになる。
http://localhost:3000/home/index
これで、http://localhost:3000/ にアクセスすれば home/index.html.erb が表示されるようになる。
マッピングを変更しただけでは、Webサーバの再起動は必要ない。
ちなみにこの動作は development mode 特有のもので、デフォルトではこのモードになっている。
おそらく production mode のようなものがあるのだろう。