From dc71396a4d1cb1947b513443e2da48b30da50ea7 Mon Sep 17 00:00:00 2001 From: Tray Torrance Date: Thu, 15 Dec 2011 15:18:07 -0800 Subject: [PATCH] Adds maintenance rake tasks for logrotate and temp file deletion; Adds whenever gem + sample whenever file --- Gemfile | 1 + config/schedule.rb.example | 25 ++++++++++++++++++++++++ lib/tasks/maintenance.rake | 39 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 config/schedule.rb.example create mode 100644 lib/tasks/maintenance.rake diff --git a/Gemfile b/Gemfile index 743350d23..d5acbde96 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ gem 'rails', '3.0.11' gem 'bundler', '>= 1.0.0' gem 'foreman' +gem 'whenever' gem 'thin', '~> 1.3.1', :require => false diff --git a/config/schedule.rb.example b/config/schedule.rb.example new file mode 100644 index 000000000..319c9aedb --- /dev/null +++ b/config/schedule.rb.example @@ -0,0 +1,25 @@ +# Use this file to easily define all of your cron jobs. +# +# It's helpful, but not entirely necessary to understand cron before proceeding. +# http://en.wikipedia.org/wiki/Cron + +# set :environment, "production" + +# Example: +set :output, File.join( File.dirname( __FILE__ ), '..', 'logs', 'scheduled_tasks.log' ) + +every 1.day, :at => '3:00 am' do + rake 'maintenance:clear_carrierwave_temp_uploads' +end + +# every 2.hours do +# command "/usr/bin/some_great_command" +# runner "MyModel.some_method" +# rake "some:great:rake:task" +# end +# +# every 4.days do +# runner "AnotherModel.prune_old_records" +# end + +# Learn more: http://github.com/javan/whenever diff --git a/lib/tasks/maintenance.rake b/lib/tasks/maintenance.rake new file mode 100644 index 000000000..fd8c9e59d --- /dev/null +++ b/lib/tasks/maintenance.rake @@ -0,0 +1,39 @@ +# Copyright (c) 2011, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. + +namespace :maintenance do + APP_ROOT = File.expand_path( File.join( File.dirname( __FILE__ ), '..', '..') ) + desc "Clear CarrierWave temp uploads" + task :clear_carrierwave_temp_uploads do + filename = File.join( APP_ROOT, 'tmp', 'uploads', '*') + today_string = Time.now.strftime( '%Y%m%d' ) + Dir.glob( filename ) do |file| + unless file.include?( today_string ) + FileUtils.rm_rf( file ) + end + end + end + + desc "Rotate Diaspora logs" + task :install_logrotate_config do + logrotate_conf = <<-RUBY +#{APP_ROOT}/logs/production.log { + daily + missingok + rotate 8 + compress + delaycompress + notifempty + copytruncate +} +RUBY + begin + File.open('/etc/logrotate.d/diaspora') do |fin| + fin.write logrotate_conf + end + rescue + puts "Could not install logrotate configs. Perhaps you should try running this task as root and ensuring logrotate is installed:\n#{logrotate_conf}" + end + end +end