merbが生成するデフォルトのアプリケーションのひな形には、最初からユーザ認証の仕組みを提供するmerb-auth-slice-passwordというSliceが組み込まれています。
これが提供するデフォルトのログイン画面を変更するためには、app/views/exceptions/unauthenticated.html.erbファイルを作ればOKです。
merbが生成するデフォルトのアプリケーションのひな形には、最初からユーザ認証の仕組みを提供するmerb-auth-slice-passwordというSliceが組み込まれています。
これが提供するデフォルトのログイン画面を変更するためには、app/views/exceptions/unauthenticated.html.erbファイルを作ればOKです。
Railsで言う所のbefore_saveのようなフィルタは、
Merb(DataMapper)では以下のように使う。
ruby>>
class Post
include DataMapper::Resource
before :save do
# do some stuff
end
def foo
puts "foo!"
end
before :foo, :bar
def bar
puts "bar!"
end
end
<<--
このbeforeメソッドは、ExtLibのhook.rbの中で定義されている。
上記のように、ブロックを取る形式と、イベントをハンドルするメソッド名をシンボルで指定する形式があります。
ExtLibが提供するhookは、saveやvalid?のような特定のイベントだけではなく、全てのメソッドに対して汎用的に利用出来るようです。
ただし、before :foo, :barのように、hookをインストールする時点で、
hookされるメソッド(この場合はfoo)が定義されている必要があります。
クラスメソッドに対するhookも用意されていて、
ruby>>
before_class_method :new do
puts "new!"
end
<<--
のように利用出来ます。
Update
beforeフィルターでメソッドの実行を中止する場合は、
ruby>>
before :save do
throw :halt
end
<<--
のように、:haltをthrowすればOKです(thanks maiha)。
これは美しい。
merb-1.0.5以降、merbのthor merb:gem:installの挙動が変わったようです。
pre>>
% thor merb:gem:install
<<--
すると、依存するgemファイル一式をMERB_ROOT/gems/以下にインストールする事が出来ます。
同時に、それらを使うためのコマンド類(merbなど)がMERB_ROOT/bin/以下に作られるので、unpackされたgemを使う場合はそれらのコマンドを使う事になります。
以前は、インストールするgem名を引数に取ったり、--cacheなどのオプションが使えたのですが、1.0.5以降はこれが出来なくなっている模様。
pre>>
% ./bin/merb -i
<<--
これを使う事で、edge merbを手元の環境で簡単に使う事が出来ます。
Zshでthor (トール)のタスクを補完するための補完関数を作ってみました。
sh>>
_thor () {
compadd thor list | awk "{print \\$1}" | grep "\w" | \ ruby -e "puts ARGF.read.gsub /\\e.*?m/,''" | xargs
}
compdef _thor thor
<<--
See Also
We just released Merb 1.0.7. Some highlights:
以下適当に訳したり訳さなかったり。
[]などのような値が使われても大丈夫になった。昨日からmasuidriveさんと調査してた
eventmachineのバグ
ですが、straceで追いかけてみた結果、
以下の部分が原因である事が分かりました。
em.cpp EventMachine_t::_RunEpollOnce() の最後付近
c>>
timeval tv = {0,0};
EmSelect (0, NULL, NULL, NULL, &tv); // <- これ
return true;
<<--
見るからにWorkaroundっぽいですね。
straceの結果では、正常に実行されてる場合には
ADDからEPOLLINまでのシステムコール呼び出しが以下のような感じなのに対して、
pre>>
write(1, "************** epoll-add: 0.0377"..., 39************** epoll-add: 0.03
7784 - 8
) = 39epoll_ctl(6, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=138272384, u64=1323936545317780646
4}}) = 0
epoll_wait(6, {{EPOLLIN, {u32=138272384, u64=13239365453177806464}}}, 65536, 50)
= 1
gettimeofday({1230425221, 603705}, NULL) = 0
write(1, "************** epoll-read: 0.020"..., 40************** epoll-read: 0.0
20716 - 8
<<--
異常時には以下のように謎のselectが発生していました。
pre>>
write(1, "************** epoll-add: 0.0295"..., 39************** epoll-add: 0.029586 - 8
) = 39
epoll_ctl(6, EPOLL_CTL_ADD, 8, {EPOLLIN, {u32=138272384, u64=1323936545317780646
4}}) = 0
epoll_wait(6, {}, 65536, 50) = 0
select(0, NULL, NULL, NULL, {0, 0}) = 0 (Timeout)
time(NULL) = 1230425221
gettimeofday({1230425221, 787115}, NULL) = 0
epoll_wait(6, {}, 65536, 50) = 0
select(0, NULL, NULL, NULL, {0, 0}) = 0 (Timeout)time(NULL) = 1230425221
gettimeofday({1230425221, 839105}, NULL) = 0
epoll_wait(6, {{EPOLLIN, {u32=138272384, u64=13239365453177806464}}}, 65536, 50) = 1
gettimeofday({1230425221, 843713}, NULL) = 0
write(1, "************** epoll-read: 0.110"..., 40************** epoll-read: 0.1
10337 - 8
<<--
どうやらこの謎のEmSelect呼び出しはビジーループ対策のために
挿入されているらしいのですが、以下のような形に直すと問題が
発生しなくなるようです。
c>>
//timeval tv = {0,0};
//EmSelect (0, NULL, NULL, NULL, &tv);
#ifdef BUILD_FOR_RUBY
if (!rb_thread_alone()) {
rb_thread_schedule();
}
#endif
<<--
eventmachineのticketにpatchが上がっている
ので、近いうちに修正されるかもしれません。
ということで、ひとまずお疲れさまでしたー>masuidriveさん
masuidrive
さんからeventmachineの挙動が不振だという相談を受けたので、
昔取った杵柄で色々調べてみています。
結局の所、EPOLL_CTL_ADD したあとに、epoll_waitがEPOLLIN
になるまでにかかる時間が、稀に1000ミリ秒程度かかる事があるというのが
問題のようでした。
なぜかKQUEUEでも同様の問題が発生するようなのですが、
とりあえずは比較的親しみ深いepollの方を調べてみる事に。
epollの実装は、linuxカーネルの中にあります。
なので、linuxカーネルのソースをインストールします。
pre>>
<<--
/usr/srcの下に圧縮されたカーネルのソースがインストールされるので、
展開します。
epoll関連のソースコードは、fs/eventepoll.cにあります。
githubのリポジトリから持ってきた
edge merb
に含まれているパッケージは、
以下の通り。
pre>>
merb-1.0.gem
merb-action-args-1.0.gem
merb-assets-1.0.gem
merb-auth-core-1.0.gem
merb-auth-more-1.0.gem
merb-auth-slice-password-1.0.gem
merb-auth-1.0.gem
merb-cache-1.0.gem
merb-core-1.0.gem
merb-exceptions-1.0.gem
merb-gen-1.0.gem
merb-haml-1.0.gem
merb-helpers-1.0.gem
merb-mailer-1.0.gem
merb-param-protection-1.0.gem
merb-slices-1.0.gem
merb_datamapper-1.0.gem
<<--
merb_datamapperは野良扱いだ。
merbのGemの名前は、"-"区切りのものと、"_"区切りのものがあるが、
という使い分けらしい。
このブログでは、記事の全文検索に
HyperEstraier
を使っています。
普段は安定して動いているのですが、
サーバが突然rebootした場合などに、DBがクラッシュしてプロセスが起動しなくなることがあります。
そんな場合の対処法をメモ。
とりあえず、HyperEstraierのホームディレクトリの下にある、_logファイルをtail -fなどして、HEを起動してみたりします。
_node以下のDBファイルが壊れているのであれば、
pre>>
<<--
などのようにして修復します。しかしなぜかわからないですが、
修復しても起動しない事が結構あります。
そういう場合には、強硬手段ですが、_node以下の破損したDBを削除して、webインターフェイスから作り直します。
その上で reindex! を実行して検索インデックスを作り直します。
以上でだいたい完了。クラッシュしなくなると良いんだけどなー。
現在のディレクトリがgitの管理下にあるかどうか判定する方法を思いついたので、
walf443さんの方法
を改良してみました。
こんな感じに、gitで管理されてないディレクトリではブランチ名を表示しなくなります。

実際のzshrcは以下の通り。
sh>>
_set_env_git_current_branch() {
GIT_CURRENT_BRANCH=$( git branch &> /dev/null | grep '^*' | cut -b 3- )
}
_update_rprompt () {
if [ "git ls-files 2>/dev/null" ]; then
RPROMPT="[%:$GIT_CURRENT_BRANCH]"]"
else
RPROMPT="[%
fi
}
precmd()
{
_set_env_git_current_branch
_update_rprompt
}
chpwd()
{
_set_env_git_current_branch
_update_rprompt
}
<<--
git ls-filesがgitの管理下以外では何も返さない事を利用しています。
追記
2>/dev/null が抜けていたので追加しました。以前、
benchmarkforrails
というRailsプラグインを紹介した事がありました。
しばらく互換性の問題があって使うのをやめていたのですが、
久々にRails-2.2.2環境で使ってみたら動いたので、
最新版のリポジトリの場所を紹介します。
gitで公開されているので、以下のようにインストールします。
pre>>
% ./script/plugin install git://github.com/cainlevy/benchmarkforrails.git
<<--
See Also
しばらくRails-2.0.2で運用しておりましたが、このたびRails-2.2.2対応にアップデートしました。
いくつか引っかかった所などをメモしておきます。
send!を呼び出してる所があって、エラーが出ていたので、sendを使うように書き換えた。ここまででテスト落ちずに全部実行できるようになった。
だいたい以上で移行完了。
何気なくTwitterのタイムラインを見ていたら、
wycatsとd2hがMerbがRails3にマージされるというお知らせをしてました。
Today is a fairly momentous day in the history of Ruby web frameworks. You will probably find the news I’m about to share with you fairly shocking, but I will attempt to explain the situation.
Merb gets merged into Rails 3!
It’s christmas, baby, and do we have a present for you. We’re ending the bickering between Merb and Rails with a this bombshell: Merb is being merged into Rails 3!
確かに最近Railsが急速にMerb化してきてる気がするなと思ってたのですが。
save!のポリシーがどういう感じにmergeされるのかが気になる所。
Updates
#merbを見ていて分かった事など。
全体的な印象として、MerbをベースにRailsを作り直す(%%ビッグバンリライトする%%→ビッグバンリライトではないと書いてた。notを読み落としてました。thanks @moro)ような感じがします。
See Also
capistranoには、以下のコマンドを実行する事で、メンテナンスページを用意する機能があります。
pre>>
% cap deploy:web:disable
<<--
コマンドを実行すると、デプロイ先のサーバ上で、shared/system/maintenance.html が生成されます。
shared以下のディレクトリは、public/の下にシンボリックリンクが作成されるので、
結果としてpublic/system/maintenance.htmlが準備される事になります。
しかし、capistranoがやってくれるのはここまでなので、
maintenance.htmlが存在した場合にそれを表示するようにするように、
Webサーバを設定する作業は自分でやる必要があります。
mod_railsとかでその辺まで面倒みてくれる感じになっていると楽なんですけどね。
その設定については、Apacheを使っている場合は以下のような感じにすればOKです。
pre>>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{REQUEST_URI} !^/images/
RewriteCond %{REQUEST_URI} !^/javascripts/
RewriteCond %{REQUEST_URI} !^/stylesheets/
RewriteRule ^.$ /system/maintenance.html [L]
RewriteRule ^/(images|javascripts|stylesheets)/(.)$ /$1/$2 [L]
<<--
ちなみに、メンテナンスページを取り下げるには、以下のコマンドを実行します。
pre>>
% cap deploy:web:enable
<<--
これで、maintenance.htmlが削除されます。
See Also
参考資料
僕はMerbではDataMapperを使うのがお勧めだと思いますが、
DataMapperで利用可能なpropertyの型をまとめておきます。
基本的には、
ruby>>
property :name, Type[, options]
<<--
という感じで利用します。
optionsとしては、Hashの形式で以下のようなものが指定出来ます。
See Also
Merb勉強会の参考資料としてMerbの思想的なものをまとめておきます。
1. alias_method_chain is evil
Rails流のalias_method_chainによる機能拡張や改変はよろしくないという立場で、代わりにあらかじめhookをちゃんと提供しようという感じみたいです。
例)
ruby>>
Merb::BootLoader.before_app_loads do
end
<<--
2. APIを用意する
MerbにはAPIが用意されていて、以下の三つのカテゴリに分かれているようです。
Merbのソースをみると、@publicや@privateなどとメソッドのコメントに書かれています。
昔からあったような気がするのですが、
つい最近までその存在に気がついてませんでした。
pre>>
% sudo gem update merb
<<--
これで、merb関連のgemを一括で最新バージョンにアップデートする事が出来ます。
しばらくMerb-1.0.3を使ってたのですが、Merb-1.0.6.1にアップデートした所、以下のようなエラーが出たので原因を調査していました。
pre>>
MERB_ROOT/slices/merb-auth-slice-activation/lib/merb-auth-
slice-activation.rb:5:in `load_dependency': wrong number of arguments (1 for 2)
(ArgumentError)
<<--
どうやらload_dependencyの第二引数が省略出来なくなったらしい。
merb-core-1.0.3/lib/merb-core/core_ext/kernel.rb
ruby>>
def load_dependency(name, *ver, &blk) dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
)
gem(dep)
rescue Gem::LoadError => e
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
ensure
begin
require dep.require_as
rescue LoadError => e
Merb.fatal! "The file #{dep.require_as} was not found", e
end
if block = dep.require_block
block.call
end
Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return
end
<<--
これに対して、
merb-core-1.0.6.1/lib/merb-core/core_ext/kernel.rb
ruby>>
def load_dependency(name, clr, *ver, &blk)
begin
dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
r, &blk)
return unless dep.require_as
Gem.activate(dep)
rescue Gem::LoadError => e
e.set_backtrace dep.original_caller
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
end
begin
require dep.require_as
rescue LoadError => e
e.set_backtrace dep.original_caller
Merb.fatal! "The file #{dep.require_as} was not found", e
end
if block = dep.require_block
block.call
end
Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return
end
<<--
第二引数のclrが省略出来なくなった模様。
private APIはメジャーバージョンアップじゃなくても仕様変わるのか。
#merbで聞いてみた所、1.0.4から以下のように明示的に指定するようになったらしい。
ruby>>
load_dependency 'merb-slices', :immediate => true
<<--
詳しくは
http://wiki.merbivore.com/releases/1.x/known_issues
参照のこと。
教えてくれたcarpeliamありがとう!
See Also
GitX
は、MacOSXで使えるGit用のGUIツールです。

基本的にはCUIで操作してるのですが、
これを使うとブランチのマージの様子などが視覚的に追えて便利。
アバター画像はメールアドレスから
gravatar経由で持ってきてるんですね。
賢い。
See Also
カウボーイ忘年会の二次会で色々お話ししてくださった、
神谷
さんから教えてもらったのですが、MEMS(Micro Electro Mechanical Systems)という技術がなかなか凄い事になっているようです。
ものすごく小さいバネが形成されています。
歯車。
See Also
MySQLでInnoDBを使っているとdata_dirの下にibdata1というファイルが出来て、このファイルサイズがだんだん大きくなっていきます。
大分肥大化してきていたので、テーブル毎に分割する設定を行いました。
/etc/mysql/my.cnf
pre>>
(snip)
[mysqld]
innodb_file_per_table
(snip)
<<--
あとはDBへのアクセスを止めて、mysqlを再起動します。
再起動したら、
sql>>
ALTER TABLE articles TYPE=InnoDB;
<<--
を実行すると、data_dirの下のデータベース名のディレクトリの下に、
いままであったarticles.frmの他にarticles.ibdのようなファイルができています。
See Also
syoyoさんが主催しているOoOで、
第五回 レンダラ忘年会 '08
が12/20(土)に開催されます。
** (OoO =オフラインレンダラ野郎のためのオフラインレンダラについて議論するオフライン会)**
- 日時: 12 月20日(土) 13:00-19:00
- 場所: 恵比寿ガーデンプレイス SGI 株式会社様(31F)
- 集合: 13:00 B1F ホール(マックの隣)
http://www.sgi.co.jp/company_info/map1.html集合時間に間に合わない方には、当日 B1F の入り口に連絡先が書かれた張り紙をしておきます。
参加費: 0 円
懇親会(任意参加): 有料
今回はレンダラ忘年会 08 です. 今年のレンダラ界隈の話題をまったりと振り返ります.
レンダラに興味がある方は振るってご参加ください。
アップデートの申請中だったPokéDiaのversion 1.1の販売が開始されました。
今回のアップデートで更新される内容は、
以前お伝えした通り、
以下の通りです。
PokéDiaをすでにご購入頂いている皆様には、長らくお待ちいただきましてありがとうございます。
今後とも機能改善を続けていきますので、よろしくお願いいたします。
gemコマンドを使っていると、古いバージョンのgemがだんだんたまっていきます。
年の瀬も近い事ですし、最新バージョン以外のgemをきれいにする方法を紹介します。
pre>>
% sudo gem clean
<<--
これでOK.
一緒にPokéDiaを開発している美谷さん主催の、
iPhoneアプリ勉強会(非技術系です)が12/22に開催されます。
僕もちょっとパネリストとして出てきます。
自然な乱数よりも、自然と認識される乱数についてもうちょっと模索すべきかなとか思った今日この頃。
準乱数(低食い違い量列とも呼ぶ)を使うと期待通りのものが得られると思います。
See Also
しばらく前からPokéDia-1.1のアップデートを申請していたのですが、
一緒に開発している美谷さんと以下のような点を検討した結果、version 1.2として開発している
現時点での最新版のアプリを、version-1.1の更新に含めて申請し直す事にしました。
具体的には、version-1.1では以下の点が更新されます。
PokéDiaをご購入いただいている皆様には、ご不便をおかけいたしまして誠に申し訳ございません。
12/13に
株式会社スプーキーズ
で開催された、
iPhone勉強会 at 京都
で発表してきました。

ほとんどトークとXcodeの画面、シミュレータだけで発表したので、
資料は上の画像だけなのですが、一応おいておきます。
勉強会の内容についてのまとめは、以下の記事などで非常に良くまとめてくださっているので、ご覧頂けると良いと思います。
iPhoneアプリ開発のような、新しい分野に挑戦していく時には、
一人だけで戦うよりも、集まって知恵を出し合って問題に
挑戦する方が有益だし、何より楽しいと思っています。
マーケットの成長がプレイヤー全員の利益になるタイミングでは、
互いにコンペティターであるという垣根を越えて、
持っている情報を出し合っていく事が全員にとって利益になり得ます。
この奇跡のようなタイミングに居合わせることが、僕は好きなんだな。
参加者の皆様、本当にありがとうございました。
Asakusa.rb会場で学んだ事をメモしていきます。
RubyのリポジトリはSVNで提供されていますが、
Git使い的には、以下のようにgit svn cloneでもってきます。
pre>>
% git svn clone http://svn.ruby-lang.org/repos/ruby -T trunk -r 20630
<<--
上記のようにリビジョン番号を指定するのが得策です。
とってきたら、まずは
pre>>
% autoconf
% ./configure
(snip)
version.h:29:22: error: revision.h: No such file or directory
<<--
というエラーが出るので、以下のようにrevision.hを作成します。
revision.h
c>>
#define RUBY_REVISON 20630
<<--
そしておもむろに
pre>>
% make
<<--
これでOK. trunkのrubyが出来上がります。
以前から気になっていた
TweetDeck
なのですが、日本語入力が出来なくてなかなか使えていませんでした。
しかし、作者の@iaindodsworthさんに聞いてみたら、日本語入力出来るようにする方法を教えてもらえました。
設定パネルから、以下の項目をチェックするだけで良いみたいです。

すばらしい!

以下のメソッドを呼び出すと何が得られるだろうか?
ruby>>
def foo
return 1
ensure
return 2
end
<<--
以下のように、ensure内でreturnされた2が帰ります。
ruby>>
foo #=> 2
<<--
面白いですね。何かに使えそうだ。
現在審査中のversion 1.1が出るのを待って、アップデートの申請を予定している PokéDia version 1.2から、
今日の残タスク(チェックボックスがついているメモ)数をバッジで表示できるようになります。

設定画面はこんな感じです。デフォルトではオフになっています。

このようなタスクがある場合、

このように、残タスク数を表示します。
iPhone内で使われている最適化されたPNGについて解説しているページ。
最適化されたPNGと、そうでないPNGでは、[UIImage drawInRect:]の速度が大分違うようです。
PNGの最適化は、Xcodeがリソース中のPNGをBundleにコピーする時に行われる模様。
現在開発中のPokéDia 1.2から、起動時に表示される日を選べるようになります。

デフォルトではオフで、終了時に表示していたページを表示します。
オンにすると、常に今日のページを表示するようになります。
今日は、報告いただいていたバグのうち、重要なものについては修正が完了しました。
以下は、解決済みのバグです。
その他、比較的すぐに実現出来る機能改善などを行っていきます。
同じアプリのアップデートを同時に複数審査してもらう事が出来ないので、
メール送信のバグを修正した version 1.1 の審査が通り次第、現在開発しているversion 1.2を申請いたします。
メール通知機能がSPAM扱いをされてしまい、メールが送信が出来なくなるトラブルが解決できたので、
PokéDia-1.1をiTunesストアに申請いたしました。
承認されるまで、今しばらくおまたせいたしますが、
何卒よろしくお願いいたします。
今後とも、ご報告いただいている不具合の修正を進めるとともに、
ご要望いただいている機能の実装などを行っていきます。
それでは、今後ともよろしくお願いいたします。
PokéDiaをお買い上げいただいた皆様。
現在(12/4)のところ、PokéDiaのメール送信機能がSPAM扱いされてしまい、うまく機能してない状態になっております。
そのため、現在メール送信機能を一時停止させて頂いております。
ご不便をおかけいたしまして申し訳ございません。
現在、この問題に対処するための改善を実装中です。
最速でアップデートが受理される事を期して、
まずは本件の修正のみを行ってアップデート申請を行う予定です。
他にもいくつかの不具合のご報告を頂いておりますが、
こちらにつきましても速やかに修正してアップデート申請をいたします。
バグ修正状況につきましては、随時このブログや、
http://pokedia.com/でご報告いたします。
至らない点が多く恐縮ですが、
何卒今後ともよろしくお願いいたします。
美谷さん
と一緒に作っていたiPhone用の手帳アプリ、
PokéDia (日本語圏ではPokeDiaと表記しています)
がiTunesストアで販売が開始されました。

PokéDiaはiPhone/iPod touch向けの日めくり手帳です。
画面全体を一日分のページとして利用できる手帳アプリとなっています。
日記、スケジュール、ToDoリストなど日々思いついたことを画面上の好きな
位置に紙の手帳と同じ感覚で書き留めることができます。
メモした情報は日付別のページに保存され、後から情報を見返すときも手帳をめくる感覚で操作することができます。

See Also
CapistranoをMerbでDataMapperを使ってる場合に、
cap deploy:migrationsを実行した時に、rake db:migrateではなく、rake db:autoupgradeをするようにするための設定の書き方のメモです。
具体的には、以下のようにdeploy:migrateタスクを書き換えます。
config/deploy.rb
ruby>>
namespace :deploy do
desc "Run autoupgrade"
task :migrate do
run "cd #{release_path}; rake db:autoupgrade MERB_ENV=production"
end
end
<<--
これでOKです。
merbのsliceはRubyGemsの形で提供されているのですが、
これをmerbアプリケーションの中に展開する方法は、
freezeとunpackの2通りあります。
app/以下のみを展開するfreezeを使う目的は、sliceの挙動を一部変更する事です。
そのため、sliceをfreezeしても、config/dependencies.rbの中で
sliceに対するdependencyを削除する事は出来ません。
依然としてsliceのgemに依存したままになります。
これに対して、unpackを使った場合、gemに内在する全てのファイルが展開されるため、config/dependencies.rbの中のsliceに対するdependencyを削除しても大丈夫な状態になります。
merbのsliceをfreezeするには、
pre>>
% rake slices::freeze
<<--
を実行すればOKです。
これにより、MERB_ROOT(Merbアプリケーションのルートディレクトリ)の下にslicesディレクトリが(無ければ)作成され、その下に<slice_name>というディレクトリが出来ます。
Sliceはその中にfreezeされます。
merbのsliceを管理するRakeタスクの一覧をメモしておきます。
以下はmerb-auth-slice-activationの場合。
pre>>
slices:merb_auth_slice_activation:copy_assets
slices:merb_auth_slice_activation:freeze
slices:merb_auth_slice_activation:freeze:app
slices:merb_auth_slice_activation:freeze:app_with_gem
slices:merb_auth_slice_activation:freeze:gem
slices:merb_auth_slice_activation:freeze:mailers
slices:merb_auth_slice_activation:freeze:models
slices:merb_auth_slice_activation:freeze:unpack
slices:merb_auth_slice_activation:freeze:views
slices:merb_auth_slice_activation:install
slices:merb_auth_slice_activation:migrate
slices:merb_auth_slice_activation:patch
slices:merb_auth_slice_activation:preflight
slices:merb_auth_slice_activation:setup_directories
slices:merb_auth_slice_activation:spec
slices:merb_auth_slice_activation:spec:controller
slices:merb_auth_slice_activation:spec:default
slices:merb_auth_slice_activation:spec:html
slices:merb_auth_slice_activation:spec:mailer
slices:merb_auth_slice_activation:spec:model
slices:merb_auth_slice_activation:spec:view
slices:merb_auth_slice_activation:stubs
<<--
merb-mailerを使ってメールを送信するための設定方法のメモです。
config/init.rbもしくは、config/environments/***.rbの中で、
以下のように設定を記述します。
sendmailを使う場合
ruby>>
Merb::BootLoader.before_app_loads do
Merb::Mailer.config = {
:sendmail_path => '/usr/sbin/sendmail'
}
Merb::Mailer.delivery_method = :sendmail
end
<<--
SMTPを使う場合
ruby>>
Merb::BootLoader.before_app_loads do
Merb::Mailer.config = {
:host => 'smtp.yourdomain.com',
:port => '25',
:user => 'user',
:pass => 'pass',
:auth => :plain,
:domain => "localhost.localdomain"
}
end
<<--
See Also
MerbではRSpecを使ってテストをするのが標準構成になっていますが、
merb-genが生成したアプリケーションのひな形では、rake specの実行結果は色付きにはなっていません。
これを色付きにするためには、spec/spec.optsの中で以下のように設定します。
spec/spec.opts
pre>>
--color
<<--
これだけです。