お願い、待って。

PostgreSQLは丈夫だし、速度も出る。使いやすい。だけど結構でかいから、あまりばかすか使うと酷いことになる。
そして、フットプリントが小さくていけてるという噂のFirebird。ARは対応してるんだけど、残念ながらrake migrateが使えない。生SQLでcreate tableしてやればいいとはいえ、Migrationを捨てるのはちょっと。
そこで登場SQLite。大規模システムには向かないけど中小規模なら十分な性能が出て、何より小さい。
と言うわけで鼻歌交じりにRailsアプリを組んで、SQLiteを採用。さあこれでメモリに優しく新サービスを、と思って試していると、多発するBusyException。おまけに一回起こると再起動してやらないと死んだまま。これじゃ使い物にならない。


これの原因は、タイムアウトまでの時間がデフォルトで0に指定されているからだそうです。シングルプロセス・シングルスレッド想定でまさに組み込み用。これじゃあ例外吐いても無理ないよね、と言うことでこの値を増やします。

pylori*style: ActiveRecordでSQLiteのbusy_timeoutをひきのばす
この記事の通り、ARから指定OK。Railsアプリで使う場合、environment.rbの後ろの方にに次のように書けば良さそうです。

connection = ActiveRecord::Base.connection
if connection.adapter_name == 'SQLite'
  connection.instance_eval {@connection.busy_timeout タイムアウトまでの時間[ms]}
end