CentOS5.3にRuby on Railsを入れる、そして使う

なぜなら卒業制作で使ってみたいから。


CentOS5.3(32bit) をインストール

うちのデスクトップはHDDをリムーバブルにしているので、
普段使ってる Ubuntu * WinXPデュアルブートHDDは一旦退避して、
実験用HDD(300GB)を装着。

学校で使えるHDDと同じ、40GBの領域をパーティションで区切って、
CentOS32bit版をインストール。

ほとんどデフォルトのままだが、途中「今すぐカスタマイズする」にチェックを入れ、
「開発」カテゴリにある「開発ツール」と「開発用ライブラリ」を追加して進める。

インストール完了。

# yum update

だけしておく。


rubymysql を入れる


RoR 2.x系は、デフォルトでSQLiteが使われる。
けど、mysqlが使いたいのでrubyとともにインストールしておく。

# yum install ruby ruby-devel rdoc mysql mysql-server mysql-devel

(中略)

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
mysql i386 5.0.45-7.el5 base 4.1 M
mysql-devel i386 5.0.45-7.el5 base 2.4 M
mysql-server i386 5.0.45-7.el5 base 9.7 M
ruby i386 1.8.5-5.el5_3.7 updates 274 k
ruby-devel i386 1.8.5-5.el5_3.7 updates 555 k
ruby-rdoc i386 1.8.5-5.el5_3.7 updates 134 k
Installing for dependencies:
perl-DBD-MySQL i386 3.0007-2.el5 base 148 k
perl-DBI i386 1.52-2.el5 base 600 k
ruby-irb i386 1.8.5-5.el5_3.7 updates 68 k
ruby-libs i386 1.8.5-5.el5_3.7 updates 1.6 M

Transaction Summary
================================================================================
Install 10 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 20 M
Is this ok [y/N]: y


そこは張り切ってYesで。

Installed: mysql.i386 0:5.0.45-7.el5 mysql-devel.i386 0:5.0.45-7.el5 mysql-server.i386 0:5.0.45-7.el5 ruby.i386 0:1.8.5-5.el5_3.7 ruby-devel.i386 0:1.8.5-5.el5_3.7 ruby-rdoc.i386 0:1.8.5-5.el5_3.7
Dependency Installed: perl-DBD-MySQL.i386 0:3.0007-2.el5 perl-DBI.i386 0:1.52-2.el5 ruby-irb.i386 0:1.8.5-5.el5_3.7 ruby-libs.i386 0:1.8.5-5.el5_3.7
Complete!


Complete!ヒュー!


gem を入れる


Rubyの関連パッケージは、RubyGemsというパッケージ管理システムで管理する。
ということで、gemをインストールする。

RubyGemsソースコードをダウンロード。
現時点での最新版は1.3.4でした。

# wget http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz

100%[=======================================>] 293,275 161K/s in 1.8s

15:33:46 (161 KB/s) - `rubygems-1.3.4.tgz' を保存しました [293275/293275]


そして解凍し、中にあるセットアップスクリプトを実行する。

# tar zxvf rubygems-1.3.4.tgz
# cd rubygems-1.3.4
# ruby setup.rb


ここでちょっと時間がかかる。数十秒?あと、

Oh-no! Unable to find release notes!


というメッセージが出るけど、開発者のお茶目さの表れなので
とりあえず気にしなくていい、そうな。


Railsのインストール

# gem install rails


カップラーメンができるくらいの間、待つ。
んで、できたら次へ。


Rubymysqlを使うためのパッケージをインストール

# gem install mysql
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.


ここに来てエラーが。
「Check the mkmf.log file for more details. 」
と言われたので、c言語のエラーが出力されたようなログを眺めてみる。
"/usr/lib"とか"/usr/lib/mysql"ってのがたくさん出ている。
ちょっとした試行錯誤を経た後、オプションでその場所を指定して実行してみる。

# gem install mysql -- --with-mysql-lib=/usr/lib/mysql
Building native extensions. This could take a while...
Successfully installed mysql-2.7
1 gem installed
Installing ri documentation for mysql-2.7...
Installing RDoc documentation for mysql-2.7...


成功した。
でも、ググってみると、mysql_configというファイルの場所をオプションで指定せよ、
という解決策がたくさん出てきました。
その場合はこういうオプションを付けて実行することになる。

# gem install mysql -- --with-mysql-config=/usr/bin/mysql_config


うーむ、今回のように、libの場所を指定という方法でもいいんですかね?
よく分かりません。わかりま千円。
これはよく分かるようになっておきたいけど、とりあえず今は先に進む。


ひとまず、これでインストールはできた。


mysqlの設定をしとく


mysqlを起動する。

# /etc/init.d/mysqld start
$ mysql -u root -p
Enter password: (何も入力しないでEnter)

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


mysqlのrootパスワードを設定。

mysql> SET PASSWORD FOR 'root'@'localhost'=password('rootのパスワード');
Query OK, 0 rows affected (0.01 sec)


RoRの開発に使うデータベースを作っておく。

mysql> CREATE DATABASE dev;
Query OK, 0 rows affected (0.01 sec)


RoRmysqlの設定をする。
config/database.ymlというファイルを編集する。

$ vim config/database.yml

development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: dev (さっき作ったデータベースの名前にする)
  pool: 5
  username: root
  password: (さっき設定したmysqlのrootパスワード)
  host: localhost


とりあえず、「development:」というセクション内にある
「database:」にさっき作ったデータベース名(dev)、
「password:」にmysqlのrootユーザのパスワードを設定する。
それ以外は放っとく。


RoRのサーバを起動しとく


RoRのプロジェクトを好き勝手にいじるためのディレクトリを作る。

$ mkdir rails
$ cd rails


HelloWorldを表示するためだけのプロジェクトを一つ作る。
データベースはmysqlを使う、というオプション付き。
オプションを省略するとSQLiteになる。

$ rails -d mysql hello


RoRのサーバを起動する。

$ ruby hello/script/server
=> Booting WEBrick
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2009-07-20 17:03:34] INFO WEBrick 1.3.1
[2009-07-20 17:03:34] INFO ruby 1.8.5 (2006-08-25) [i386-linux]
[2009-07-20 17:03:44] INFO WEBrick::HTTPServer#start: pid=29734 port=3000


ブラウザでhttp://localhost:3000にアクセスしてみて、

Welcome aboard
You’re riding Ruby on Rails!


というようなページが表示されるのを確認する。
これは、/hello/public/index.htmlが表示されている。


Hello Worldをやってみる


では、試しにHello Worldを表示してみる。

RoRのアプリとしては、publicディレクトリじゃなくて
appディレクトリ以下にMVC(Model, VIew, Controller)を配置する。
次の手順で作れる。


1)コントローラ Hello を作る

$ ruby script/generate controller Hello


これで、app/controllers/hello_controller.rb が作成された。


2)hello_controller.rbの中身をちょっといじる


Helloコントローラの実態は、HelloControllerクラス。
ここに、indexアクションを定義する。アクションの実態は
オブジェクト指向で言うところのメソッド。

$ vim app/controllers/hello_controller.rb

class HelloController < ApplicationController
  def index
    @message = "Hello, world"
    render
  end
end


3)ビュー index.rhtml を作る


さっき、Helloコントローラの中に定義したアクションと
同じ名前("index")を使って、rhtmlファイルを作る。
場所は app/views/hello/ 以下。

$ vim app/views/hello/index.rhtml


  
    <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hello%20World">Hello World</a>
  

  <%= @message %>


4)ブラウザでアクセスしてみる。

http://localhost:3000/hello/index

を開くと、

Hello, world

とだけ表示される。そっけないけどできた(゚Д゚)