2011年07月11日の日記

MongoDBが起動しなくなったときの対処法(公式Ubuntuパッケージの場合)

なんかさくらのVPSが勝手にリスタートしたみたいで、MongoDBが起動しなくなった。

モッピー知ってるよ、--repair コマンド使えばいいんだよね。

$ sudo mongod --dbpath=/var/lib/mongodb --repair

あれれー?mongodb.lock ファイル消えないし、起動できないし。

ググると、公式 Ubuntu パッケージの場合はちょっと対処法がちがうっぽい:

$ sudo rm /var/lib/mongodb/mongod.lock
$ sudo -u mongodb mongod -f /etc/mongodb.conf --repair
$ sudo /etc/init.d/mongodb start

これでいけた。ふぅ・・・

Spork で自動的に Model や Routes をリロードする方法

Spork は、起動時に Rails 本体だけでなくアプリケーションもガーッと読み込むので、Model や Routes を変更しても、終了・起動しないと反映されない。これでは autotest なんか使っている時めんどくさいので、ちょっと設定を変更した。

最初はこっちを参考に変更しようと思ったんだけど、こっちの方が追加行数が短いので、後者にした。

spec/spec_helper.rb

Spork.each_run do
  # This code will be run each time you run your specs.

  load "#{Rails.root}/config/routes.rb"
  Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f }

end

うん、できた。

Enterを入力した時に更新するテキストボックスのテストの書き方

jQuery で、

$("#target").keypress(function(event) {
  if ( event.which == 13 ) {
    //更新...
  }
};

とか書けるじゃないっすか。13 は [Enter] のキーコードね。

それで、capybara でどうやってテスト書いたもんかなぁと色々試行錯誤して、@さんに教えてもらっちゃったりして、できた:

  page.execute_script(<<-JS)
    $("#target").attr("value", "ABC");
    $("#target").trigger({type: "keypress", keyCode: "13"});
  JS

長いこと懸案事項だったので助かりました。


なんで今までできなかったかというと、jQuery の公式ドキュメントが間違っていたから

  // Create a new jQuery.Event object with specified event properties.
  var e = jQuery.Event("keydown", { keyCode: 64 });

  // trigger an artificial keydown event with keyCode 64
  jQuery("body").trigger( e );

keyCode は数値じゃなくて文字列を指定しないといけないのでした。ちゃんちゃん。