めがね

[...]

DRBD & Heartbeat – takeover/failback verification

DRBD 上の ext3 filesystem を Heartbeat 配下に設定し、 Primary を落としたときと、落としてからあげたときの syslog。

何が起きているのかさっぱりですが、時間を作って追っかけたいと思います。

とりあえず、 Primary で mount されてた /var/lib/mysql という directory は、 Primary の shutdown 後、ちゃんと Secondary で mount されました。そして落とした Primary の復旧後、ちゃんと Secondary から Primary に戻りました。

以下の document が参考になるかも。

DRBD – Integrating with Heartbeat V1 [対訳]- http://bougaidenpa.org/masakazu/entry/drbd_integrating_with_heartbeat_v1

以下は設定。

FILE: /etc/drbd.conf

resource r0 {
protocol C;
incon-degr-cmd "echo ‘!DRBD! pri on incon-degr’ | wall ; sleep 60 ; [...]

mixi clone on rails 04

本日の目標

とりあえずトップページだけ作ってみます(その 2)。

前回に引き続き今日は、

mixlone の Controller 機能を集約する Main Controller の作成
認証情報(ひとの情報)を格納する Person Model の作成
ログイン処理をする login Action の実装
ログイン済みか確認しログインしていなければログインページへリダイレクトする before Filter の実装と設定

の残り 3 と 4 を実装します。

login Action の実装

login Action では以下の処理を行うことにします。

ログインフォームの表示 – メールアドレスとパスワードを入力するフォームを表示します。下には“ログイン”ボタンがあり、これを押すと login Action 自身へ POST されるようにします。
ログイン処理の実施 – POST されたメールアドレスとパスワードに一致する Person が存在するか確認します。一致する Person が存在する場合は session[:person_id] に Person の id を格納し home Action へリダイレクトします。一致する Person が存在しない場合はエラーメッセージを表示します。

まずはログインフォームの準備から始めましょう。

http://(サーバの IP アドレス):3000/main/login へアクセスした際に表示されるのは app/views/main/login.rhtml でした。これを以下の通り変更します。

FILE: app/views/main/login.rhtml
1 [...]

mixi clone on rails 03

本日の目標

とりあえずトップページだけ作ってみます(その 1)。

閉鎖的な mixlone ではアカウントを持った人がログインした状態でないといかなるコンテンツも閲覧出来ないようにします。そのためには、

mixlone の Controller 機能を集約する Main Controller の作成
認証情報(ひとの情報)を格納する Person Model の作成
ログイン処理をする login Action の実装
ログイン済みか確認しログインしていなければログインページへリダイレクトする before Filter の実装と設定

を実装しなければならないわけですが、今日は上記のうち 1 と 2 を実装します。

Main Controller の作成

Rails には Model や View/Controller のひな形を作成してくれる便利な script/generate というスクリプトが用意されています。

以下の通り script/generate を実行し Main Controller(と home Action と login Action) のひな形を作成します。

masakazu@debian:~/mixlone$ script/generate controller Main home login
exists app/controllers/
exists app/helpers/
create app/views/main
exists test/functional/
create [...]

mixi clone on rails 02

mixlone を実装していく前に Ruby on Rails とその背景について軽くおさらいしておきます。 Ruby on Rails には Key となる Component が 2 つあります。

Active Record

Model-View-Contoroller Pattern で言うところの Model 担当。

いわゆる ORM(Object-Relational Maping)。 Java で言うところの Hibernate とか JPA とか 。 .NET で言えば ADO.NET か。

他の ORM と比較しての一番の特徴は “(ほぼ)設定不要” 。

たとえば以下のようなテーブルがあるとすると、

CREATE TABLE products (
id int(11) NOT NULL auto_increment,
name varchar(255),
PRIMARY KEY (id)
);

最低限必要なコードは、

class Product < ActiveRecord::Base; end

だけ。

これだけでこんなことができるようになる。

# あたらしい Product を登録
product [...]

mixi clone on rails 01

Ruby on Rails の勉強してるけど、やっぱり本読んでるだけじゃ身に付かないよね、ってことでなんか適当なネタを Rails で実装してみようと思います。

昔友達と PHP の勉強のために mixi のクローン(要するにパクり)を実装しようとした(そして途中で飽きてやめた)ことがあったけど、同じことを Ruby on Rails でやってみます。

また途中で飽きる可能性大ですけど。

Rails 環境の準備

Mac mini の上の VMware Fusion の上の Debian 4.0 の上に作ります。一通り必要となりそうなものを aptitude でインストール。

まずは rails から。

debian:~# aptitude install rails
Reading package lists… Done
Building dependency tree… Done
Reading extended state information
Initializing package states… Done
Writing extended state information… Done
Reading task descriptions… Done
Building tag database… Done
The following NEW packages will [...]