merb -iは、 Merb-1.0におけるscript/console的な対話型インターフェイスを提供するコマンドですが、 アダプターとしてThinを使っていると、エラーが発生してうまく使えないようです。

   1  % merb -i
   2    (snip)
   3   ~ Connecting to database...
   4   ~ Loaded slice 'MerbAuthSlicePassword' ...
   5   ~ Parent pid: 29906
   6   ~ Compiling routes...
   7   ~ Activating slice 'MerbAuthSlicePassword' ...
   8  merb : worker (port 4000) ~ Starting Thin at port 4000
   9  merb : worker (port 4000) ~ Using Thin adapter on host 0.0.0.0 and port 4000.
  10  merb : worker (port 4000) ~ Successfully bound to port 4000
  11  /opt/local/lib/ruby/gems/1.8/gems/eventmachine-0.12.2/lib/eventmachine.rb:531:in
  12   `start_tcp_server': no acceptor (RuntimeError)

mongrelとwebratをインストールし、adapterとしてMongrelを使うようにすると、merb -iでエラーが出なくなりました。

   1  % merb -i
   2    (snip)
   3   ~ Connecting to database...
   4   ~ Loaded slice 'MerbAuthSlicePassword' ...
   5   ~ Parent pid: 29931
   6   ~ Compiling routes...
   7   ~ Activating slice 'MerbAuthSlicePassword' ...
   8  irb: warn: can't alias context from irb_context.
   9  irb(main):001:0> 

Merbの名称はMongrel+ERBから来てるみたいだけど、 とりあえずはしばらくMongrelを使っておくのが無難かもですね。 少なくとも開発環境では。

posted by Png genki on Wed 19 Nov 2008 at 08:57
posted by Png genki on Wed 19 Nov 2008 at 08:13

MerbでWebサーバのプロセスをデーモンモードで立ち上げる場合、 以下のように行います。

   1  % merb -d

これによって、log/の下に、merb.4000.pidのようなPIDファイルが作成されます。

立ち上げたプロセスをKillする場合は、以下のようにポート番号を指定して-kオプションを使います。

   1  % merb -k 4000

あるいは、gracefulにkillしたい場合は、-kの代わりに-Kを使います。

   1  % merb -K 4000

ポート番号を指定せずに、allを指定する事もできます。

   1  % merb -K all

-kの方ではallは指定出来ないようです。

posted by Png genki on Tue 18 Nov 2008 at 03:49

Merbを使う時に、利用するWebサーバを切り替えるには、 以下のように、-aオプションを使う事ができます。

   1  % merb -a thin

毎回指定するのも面倒なので、config/environment/*.rb ファイルの中で、 以下のように設定する事もできます。

   1  Merb::Config.use { |c|
   2    # snip
   3    c[:adapter] = :thin
   4  }

posted by Png genki on Tue 18 Nov 2008 at 03:35

merb-genコマンド用にZshの補完関数を作りました。

   1  _merb-gen () {
   2    compadd `merb-gen | grep '^  *' | awk '{print \$1}' | xargs`
   3  }
   4  
   5  compdef _merb-gen merb-gen

.zshrcなどに記述すれば、 以下のような感じで補完出来ます。

   1  % merb-gen [TAB]
   2  --debug      controller   part
   3  --no-color   core         plugin
   4  -d,          flat         resource
   5  -f,          helper       resource_controller
   6  -h,          layout       session_migration
   7  -p,          mailer       slice
   8  -s,          migration    very_flat
   9  app          model

posted by Png genki on Tue 18 Nov 2008 at 03:05

Merb-1.0がリリースされた事もあり、使ってみる事にしました。 Merbの使い方といえば、 優しい Merb の育て方 という素晴らしいまとめがありますが、 1.0になっていくつか新しい情報が必要になっている所があるので、 ざっくりと手順をまとめてみます。

まずはアプリを生成

アプリケーションの生成には、merb-genコマンドを使います。 これは、Railsで言えばscript/generateに相当します。

   1  % merb-gen app appname

appというのは何を作りたいかを指示するサブコマンドです。

これでひな形は出来上がったので、あとはmerbコマンドでウェブサーバを起動してブラウザでアクセス、といきたい所なのですが、 そうは問屋が卸さないとばかりに罠が待っていました。

Merb1.0 Install & Create First Application & TroubleCommentsAdd Star

と、ここまでが通常の道筋なのですが

昨日は最後のmerbコマンドを実行するとエラーになって起動しませんでした。

どうやら、タイミング悪く addressable というGemの最新バージョン(2.0.0)が、 現時点でのMerbでうまく動かないようです。

ということで、一個前のバージョンにダウングレード。

   1  % sudo gem install addressable -v 1.0.4
   2  % sudo gem uninstall addressable -v 2.0.0

あとは、merbコマンドでサーバを立ち上げて、http://localhost:4000/を見に行くだけです。

Fresh Merb App
Uploaded with plasq's Skitch!

デフォルトではMongrelが使われるようですが、例えばThinを使いたい場合は、

   1  % merb -a thin

で起動出来ます。

posted by Png genki on Tue 18 Nov 2008 at 00:30

iPhoneアプリの開発をしていると、たまに、 Xcodeがプロビジョニングファイルを検出してくれなくて困ることがあります。 あれこれとやってるうちになんとか検出出来るようになるのですが、 これさえやれば100%大丈夫というような処方箋には未だ出会えずにいます。 とりあえず自分がよくやる事をメモしておきます。

  1. Xcodeのプロセスを全て終了して起動し直す
  2. オーガナイザを起動し、問題がありそうなプロビジョニングファイルを削除して入れ直す
  3. ~/Library/MobileDevice/Provisioning\ Profiles/の下を確認し、当該ファイルを削除してみる
  4. Macを再起動する
  5. iTunesも再起動する
  6. プロビジョニングファイルを削除してからiTunesにD&Dしてみる
  7. YourAppName.xcodeproj/project.pbxprojファイルをテキストエディタで開き、プロビジョニングファイルの指定を確認する

何かしらいろいろとやってるうちに問題は解決するのですが、 一度はまると小一時間ぐらい無駄にしてしまうので、 なんとか解決方法を確立したいですね。

posted by Png genki on Sun 16 Nov 2008 at 22:50

と、ふと思った。

命の価値と価格と

その誰か、というのは、実は明らかすぎる。 医師不足と言うけれど 医師不足の中の諦め

「今よりもっと良い周産期医療体制を望みたい」 と誰かが望んでも 「今より少し不便になっても良い」 と誰かが許容しなければ議論は進みません

高齢者たち、である。

posted by Png genki on Sun 16 Nov 2008 at 00:50

Objective-CでMethodのIMPを取得して呼び出す場合に、 正しい関数プロトタイプの関数ポインタにキャストする必要がありますが、 typedefなどを使わずにその場で目的の関数ポインタ型にキャスト する方法を紹介します。

   1  SEL selector = @selector(drawRect:);
   2  Method method = class_getInstanceMethod([UISearchBar class], selector);
   3  IMP drawRect = method_getImplementation(method);
   4  ((void(*)(id, SEL, CGRect))drawRect)(self, selector, rect);

こんな感じにすればOkです。

posted by Png genki on Thu 13 Nov 2008 at 01:15

Objective-Cのコードを書いていると、メモリリークを していないかという所が気になりますが、 scan-buildコマンドを使うと、非常に簡単に静的にプログラムを解析して メモリリークを検出することができます。

   1  % scan-build xcodebuild

プロジェクトのディレクトリに移動して、上記コマンドを実行するだけです。 標準出力と/tmp(あるいはオプションで指定したディレクトリに)レポートが出力されます。

メモリリークはInstrumentsでも検出出来ますが、 これもなかなか便利ですね。

See Also

posted by Png genki on Sun 9 Nov 2008 at 16:47
Contents
merb -iを実行するためにはMongrelを使う必要がある
Merbのチュートリアルを探してみた
Merbのプロセスを起動・終了する方法
Merbで使用するWebサーバを設定する方法のメモ
Zsh用merb-genコマンド補完関数
Merb-1.0を使う
プロビジョニングファイルをXcodeが検出してくれない場合の対処
産科医療特定財源として「孫税」を設けてはどうだろう
その場で関数ポインタ型にキャストする方法
scan-buildでメモリリークを発見する方法のメモ
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ