What’s the best strategy for log rotation with apache+passenger+ruby-on-rails+thesql

apache-2.2loggingphusion-passengerruby-on-rails

(Hope I have the right SE site for this question, apologies if not.)

I have a Ruby-on-Rails application that is deployed using Apache+mod_rails (passenger). It uses MySQL for the database backend. I'm using SyslogLogger to send the RoR log to syslog and using logrotate via a daily cron job to rotate the logs.

What I've found is that the RoR app hangs if it is in the middle of something when the logs are rotated. I've tried putting copytruncate in the logrotate configuration, but it appears that this also affects the apache logs (maybe because the RoR error logs go to the error.log file of apache) and – possibly – also the MySQL logs (maybe – it's sometimes hard to correlate exactly which log causes the crash).

Searching on the internet turns up some different solutions on log rotation, one is to use the copytruncate key, another is to use cronolog, but I've yet to find one that directly addresses the issue I'm seeing.

So is there a known solution for this? What is the "right way" to rotate logs on a RoR application (using apache and mod_rails for deployment)? Should I just put copytruncate in every logrotate configuration file that is vaguely related with the application?

Best Answer

Instead of 'copytruncate', these lines worked for me in the logrotate file for my rails app:

  postrotate
    touch /your-rails-directory/tmp/restart.txt
  endscript