2016-11-16 00:56:29 +09:00
# frozen_string_literal: true
2016-09-10 23:21:17 +09:00
namespace :mastodon do
2017-02-14 04:41:48 +09:00
task make_admin : :environment do
include RoutingHelper
user = Account . find_local ( ENV . fetch ( 'USERNAME' ) ) . user
user . update ( admin : true )
puts " Congrats! #{ user . account . username } is now an admin. \\ o/ \n Navigate to #{ admin_settings_url } to get started "
end
2017-04-09 08:09:46 +09:00
desc 'Manually confirms a user with associated user email address stored in USER_EMAIL environment variable.'
task confirm_email : :environment do
email = ENV . fetch ( 'USER_EMAIL' )
2017-04-11 07:13:08 +09:00
user = User . where ( email : email ) . first
if user
user . update ( confirmed_at : Time . now . utc )
puts " User #{ email } confirmed. "
else
abort " User #{ email } not found. "
end
2017-04-09 08:09:46 +09:00
end
2016-09-10 23:21:17 +09:00
namespace :media do
desc 'Removes media attachments that have not been assigned to any status for longer than a day'
task clear : :environment do
2016-10-23 02:38:47 +09:00
MediaAttachment . where ( status_id : nil ) . where ( 'created_at < ?' , 1 . day . ago ) . find_each ( & :destroy )
2016-09-10 23:21:17 +09:00
end
2017-01-12 12:19:04 +09:00
desc 'Remove media attachments attributed to silenced accounts'
task remove_silenced : :environment do
MediaAttachment . where ( account : Account . silenced ) . find_each ( & :destroy )
end
2016-09-10 23:21:17 +09:00
end
namespace :push do
desc 'Unsubscribes from PuSH updates of feeds nobody follows locally'
task clear : :environment do
2016-10-18 19:23:38 +09:00
Account . remote . without_followers . where . not ( subscription_expires_at : nil ) . find_each do | a |
2016-09-20 08:10:51 +09:00
Rails . logger . debug " PuSH unsubscribing from #{ a . acct } "
2016-12-02 22:14:49 +09:00
UnsubscribeService . new . call ( a )
2016-09-20 07:39:03 +09:00
end
end
desc 'Re-subscribes to soon expiring PuSH subscriptions'
task refresh : :environment do
Account . expiring ( 1 . day . from_now ) . find_each do | a |
2016-09-20 08:10:51 +09:00
Rails . logger . debug " PuSH re-subscribing to #{ a . acct } "
2016-11-16 00:56:29 +09:00
SubscribeService . new . call ( a )
2016-09-10 23:21:17 +09:00
end
end
end
namespace :feeds do
2016-11-25 02:17:58 +09:00
desc 'Clear timelines of inactive users'
2016-09-10 23:21:17 +09:00
task clear : :environment do
2017-03-04 07:45:48 +09:00
User . confirmed . where ( 'current_sign_in_at < ?' , 14 . days . ago ) . find_each do | user |
2016-11-25 02:17:58 +09:00
Redis . current . del ( FeedManager . instance . key ( :home , user . account_id ) )
end
end
desc 'Clears all timelines so that they would be regenerated on next hit'
task clear_all : :environment do
2016-11-16 00:56:29 +09:00
Redis . current . keys ( 'feed:*' ) . each { | key | Redis . current . del ( key ) }
2016-09-10 23:21:17 +09:00
end
end
2017-03-04 07:45:48 +09:00
namespace :emails do
desc 'Send out digest e-mails'
task digest : :environment do
User . confirmed . joins ( :account ) . where ( accounts : { silenced : false , suspended : false } ) . where ( 'current_sign_in_at < ?' , 20 . days . ago ) . find_each do | user |
DigestMailerWorker . perform_async ( user . id )
end
end
end
2017-03-31 20:01:00 +09:00
namespace :maintenance do
desc 'Update counter caches'
task update_counter_caches : :environment do
Rails . logger . debug 'Updating counter caches for accounts...'
Account . unscoped . select ( 'id' ) . find_in_batches do | batch |
Account . where ( id : batch . map ( & :id ) ) . update_all ( 'statuses_count = (select count(*) from statuses where account_id = accounts.id), followers_count = (select count(*) from follows where target_account_id = accounts.id), following_count = (select count(*) from follows where account_id = accounts.id)' )
end
Rails . logger . debug 'Updating counter caches for statuses...'
Status . unscoped . select ( 'id' ) . find_in_batches do | batch |
Status . where ( id : batch . map ( & :id ) ) . update_all ( 'favourites_count = (select count(*) from favourites where favourites.status_id = statuses.id), reblogs_count = (select count(*) from statuses as reblogs where reblogs.reblog_of_id = statuses.id)' )
end
Rails . logger . debug 'Done!'
end
end
2016-09-10 23:21:17 +09:00
end