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を使うのがとても気軽になりますね。