iotopというコマンドを使うと、プロセスごとのIO使用状況が top コマンドのような感じに把握でき、システムのボトルネックの分析に使えます。

ubuntuの場合は

   1  apt-get install iotop

で導入できます。

iftop とあわせて Have a nice admin life!

posted by Png genki on Tue 28 Jun 2011 at 16:23

Singletonを使う場面はよくあるんですが、iOS4以降はGrand Central Dispatchがあるのでそれのdispatch_onceを使う必要があるみたいで、メモ。

GCD 前:

   1  + (MyController*)singleton {
   2  	static MyController *controller = nil;
   3  
   4  	if(!controller) {
   5  		controller = [[MyController] alloc] init];
   6  	}
   7  	return controller;
   8  }

GCD 後:

   1  + (MyController*)singleton {
   2  	static dispatch_once_t pred = 0;
   3  	static MyController *controller = nil;
   4   
   5   	dispatch_once(&pred, ^{
   6    		controller = [[MyController alloc] init];
   7   	});
   8   	return controller;
   9  }

Cocoa Fundamentals GuideのClass Factory Methods項の下のほーーーうにあるCreating a Singleton Instanceの説明もとても参考になります。これは読むべし:

Cocoa Fundamentals Guide
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

また、Apple Developer Forumsのこの質問もとても勉強になります:

Apple Developer Forums
https://devforums.apple.com/message/455002#455002

下記も参考

Singletons: You're doing them wrong
http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong.html

posted by Png satoko on Tue 28 Jun 2011 at 11:21

普段サーバの監視にmonitを使っていますが、ubuntu nattyの環境に入れようとしたところ、monitが起動しないという問題に遭遇しました。

理由を調べてもなかなか分からなかったのですが、どうやらパッケージインストール時に最初にある設定ファイルのままhttpdの設定を行うと起動しないようです。

   1  set httpd port 2812
   2    use address localhost # <- これがあると起動しない
   3    allow localhost

posted by Png genki on Tue 28 Jun 2011 at 00:16

ubuntuでパッケージのインストールを行ったとたん、 掲題のエラーメッセージが出るようになりました。 なかなか原因が分からなかったのですが、一つの原因として、

  • 削除されたディレクトリの中で何かしらコマンドを実行すると発生する

ようです。存在するディレクトリにcdしてからもう一度確認すると、何事もなかったように元の状態に戻りました。 レアな問題のようですね。

posted by Png genki on Tue 21 Jun 2011 at 21:10

ActiveRecordを使っている場合、 YamlDb を使うと比較的簡単にデータの移行ができるようです。 script/consoleあたりから、

   1  YamlDb.dump "/path/to/data.yml" # dump
   2  YamlDb.load "/path/to/data.yml" # load

という感じに使えます。structureは作ってくれないので、migrationなどであらかじめ用意しておきます。

posted by Png genki on Mon 20 Jun 2011 at 16:07

route53 は、名前のとおり AmazonのRoute 53 を使うためのCLIユーティリティです。 これを使えば面倒な設定が簡単になります。

例) CNAMEレコードの中身を変更する

   1  route53 --zone xxx.xxx. -g --name "*.xxx.xxx." --type CNAME --values xxx-xxx.ap-xxx-1.elb.amazonaws.com.

今までスルーしてましたが、Route53を使えば ELBでZone Apexが使えるようになったので非常に面白いです。

posted by Png genki on Sun 19 Jun 2011 at 23:08

buildが必用なgemをbundlerで管理するときに、 buildオプションを指定したい場合があります。 そのような場合には、

   1  bundle config build.pg --with-pg-dir=/Library/PostgreSQL/9.0

のようにgemごとにbuildオプションを設定することが出来ます。 この設定は ~/.bundle/config に以下のように保存されます。

   1  ---
   2  BUNDLE_BUILD__PG: --with-opt-dir=/Library/PostgreSQL/9.0

posted by Png genki on Mon 13 Jun 2011 at 16:37

my.cnfの中で、clientとserver両方max_allowed_packet を適当に大きな数値に指定する。

   1  max_allowed_packet = 16M

config/database.yml でコネクション切断時に再接続する設定をする。

   1  production:
   2    reconnect: true

これで多分大丈夫。

posted by Png genki on Sat 11 Jun 2011 at 10:05

昔は mysql_retry_lost_connection というものがあったのですが、最近 (Rails-2.3以降) は config/database.yml の中で

   1  production:
   2    reconnect: true

とやるだけで、接続が切れた場合に再接続してくれるようです。 まあ、ここまで用意するならデフォルトでそうなってても良いと思うんですけどね。

posted by Png genki on Sat 11 Jun 2011 at 07:06

Rails-2.3.11用のExceptionNotificationプラグインは以下にあるようです (via @a_matsuda

基本的にはこれを script/plugin install -r 2-3-stable すれば良いのですが、ConsiderLocalの実装にバグがあるので 直す必要があります。

具体的には、以下のファイルの self.included の場所をConsiderLocalモジュールの直下に移動します。

あとはREADME通りに設定して、ConsiderLocalをApplicationControllerからincludeすればok

posted by Png genki on Sat 11 Jun 2011 at 06:51