Files
danbooru/app/logical/danbooru_maintenance.rb
evazion 3b73861d05 maintenance: fix undefined current user exception.
Possible fix for this exception that happens in production for unclear
reasons:

    NoMethodError: undefined method `is_admin?' for nil:NilClass
    …oru/releases/20200805193154/app/policies/tag_policy.rb:    3:in `can_change_category?'
    …www/danbooru/releases/20200805193154/app/models/tag.rb:  216:in `find_or_create_by_name'
    …www/danbooru/releases/20200805193154/app/models/tag.rb:  193:in `block in create_for_list'
    …www/danbooru/releases/20200805193154/app/models/tag.rb:  193:in `map'
    …www/danbooru/releases/20200805193154/app/models/tag.rb:  193:in `create_for_list'
    …ww/danbooru/releases/20200805193154/app/models/post.rb:  463:in `normalize_tags'
2020-08-07 09:06:23 -05:00

47 lines
1.2 KiB
Ruby

module DanbooruMaintenance
module_function
def hourly
safely { Upload.prune! }
end
def daily
safely { PostPruner.prune! }
safely { Delayed::Job.where('created_at < ?', 45.days.ago).delete_all }
safely { PostDisapproval.prune! }
safely { regenerate_post_counts! }
safely { TokenBucket.prune! }
safely { BulkUpdateRequestPruner.warn_old }
safely { BulkUpdateRequestPruner.reject_expired }
safely { Ban.prune! }
safely { ActiveRecord::Base.connection.execute("vacuum analyze") unless Rails.env.test? }
end
def weekly
safely { TagRelationshipRetirementService.find_and_retire! }
safely { ApproverPruner.dmail_inactive_approvers! }
end
def monthly
safely { ApproverPruner.prune! }
end
def regenerate_post_counts!
updated_tags = Tag.regenerate_post_counts!
updated_tags.each do |tag|
DanbooruLogger.info("Updated tag count", tag.attributes)
end
end
def safely(&block)
ActiveRecord::Base.connection.execute("set statement_timeout = 0")
CurrentUser.scoped(User.system, "127.0.0.1") do
yield
end
rescue StandardError => exception
DanbooruLogger.log(exception)
raise exception if Rails.env.test?
end
end