Railsでキャッシュストアをファイル(config.cache_store = :file_store)にして、ガンガンキャッシュを活用していると、サイトの規模が大きくなった時にrake tmp:cache:clearが辛くなってくる。やたら時間かかるようになるし、その間サーバの負荷もヤバイ。困った。

メモリストアにするとか、Memcached使うとかするべきなのかもしれないけど、VPSとかでギリギリやってるとメモリに余裕がないんです。

そこで、キャッシュファイルを削除するかわりに/tmpへmvするrakeタスクtmp:cache:flushを作ってみた。

lib/tasks/tmp_cache_flush.task

でもこれだけだと、サーバをリブートした時とか、/tmpが削除されるタイミングが辛そうなので、夜中にひっそり消すようにする。サーバに負荷をかけないように、優先度を下げて処理する。

crontab

あ、Rails使いならcrontabを直接書いたりせず、当然wheneverを使いますよね!

config/schedule.rb

wheneverを使うと、バッチ処理をアプリケーションの責任で管理できるし、Capistranoを使えばデプロイ時にcrontabを自動的に書き換えてくれるので、cronを使うのがとても気軽になりますね。