2007-09-17 優しい Merb の育て方 [長年日記]

[Rails][Merb] Merb とは?

Merb (Mongrel + Erb) は MVC ベースな Ruby の Web フレームワークである。簡単に言うと、軽量な ActionPack クローンである。Rails のテーマが「規約とDRY」ならば、Merbのテーマは「疑わしきものは入れない」であり、Rails の各機能を取り込みつつも、小さくて単純で簡単で軽量、そして高速であることを目指している。

特徴

  • コアはシンプルに (必要な機能はプラグインとして追加させる)
  • thread safe
  • cgi.rb を使っていない
  • 高速な ERb エンジンである Erubis を標準装備
  • Rails に似ている (機能、ファイル配置)
  • 大体3倍くらい速い (Rails Mongrel との比較)

チートシート (Rails との比較)

基本的に Rails である。app 以下のディレクトリ構成も殆ど同じなので非常に馴染み深い。

RailsMerb補足
アプリ作成rails app1merb -g app1-g は generate の意
サーバ起動script/server startmerbmerb のプロジェクトルートにて実行する
クラスタ化(別途準備)merb -p 3000 -c 33000,3001,3002 で起動
コンソールscript/consolemerb -i
ルーティングconfig/routes.rbconfig/router.rb
サーバ設定config/environment.rbconfig/merb.ymlホスト名、ポート、実行モード、HTTP認証、等
基本設定config/environment.rbconfig/merb_init.rb起動時に実行するRubyコード
依存関係設定config/environment.rbconfig/dependencies.rbロードパス、プラグイン設定
プラグインvendor/pluginsdeps/plugins独自形式(Merb::Plugins)とRails形式の両方をサポート
DB管理ActiveRecord::MigrationActiveRecord::Migration
マイグレーションdb/migrateschema/migrations
テスト方法unitspecデフォルトのテスト方法
テストディレクトリtesttest/spec
app以下の違い-+ mailers, partsparts は partial や component のようなもの

(2007/9現在のバージョンは 0.4)

Merbインストール

$ sudo gem install mongrel erubis json mime-types archive-tar-minitar rspec activerecord rubigen --include-dependencies
$ svn co http://svn.devjavu.com/merb/trunk merb
$ cd merb
$ rake install

プロジェクト作成

$ merb -g app1

サーバ起動

$ cd app1
$ merb

  • プロジェクトディレクトリの top にて merb を実行

Hello nksk

class Hello < Application
  def index
    "Hello nksk!"
  end
end
app/controllers/hello.rb

Hello nksk!
http://localhost:4000/hello

  • デフォルトは 4000 ポート
  • コントローラのファイル名に "_controller" は不要
  • デフォルトアクションは "index"
  • アクションの実行結果(のオブジェクト)が HTTP のレスポンスボディになる
  • コントローラ用の generator はまだない?

助けて、熊井ちゃん!

  • model や controller 用のジェネレータが見つかりません
    • 多分まだない
  • merb サーバを起動したのに接続できないよ?
    • デフォルトポートは4000です
    • デフォルトはlocalhostのみlistenするので、:host の値をホスト名にする (config/merb.yml)
  • Internal server error 500 (Merb::CookieStore::TamperedWithCookie) て何?
    • ブラウザが同じホストの別アプリの cookie を利用してるときに出る。本当かな?バグかもね
    • → 新規ブラウザで実行
    • → セッションが使えなくてよければ、":session_store: xxx" のように存在しない形式を指定する (config/merb.yml)

参考


サイト内検索 (by Google)

| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |

過去

2007年
9月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

未来

コンタクト