Add rake task to clean up orphane Redis keys when a multisite has been removed.
This commit is contained in:
parent
96183dbf6b
commit
ce36f54dcd
|
@ -0,0 +1,30 @@
|
||||||
|
task 'redis:clean_up' => ['environment'] do
|
||||||
|
return unless Rails.configuration.multisite
|
||||||
|
|
||||||
|
dbs = RailsMultisite::ConnectionManagement.all_dbs
|
||||||
|
dbs << Discourse::SIDEKIQ_NAMESPACE
|
||||||
|
|
||||||
|
regexp = /((\$(?<message_bus>\w+)$)|(^?(?<namespace>\w+):))/
|
||||||
|
|
||||||
|
cursor = 0
|
||||||
|
redis = $redis.without_namespace
|
||||||
|
|
||||||
|
loop do
|
||||||
|
cursor, keys = redis.scan(cursor)
|
||||||
|
cursor = cursor.to_i
|
||||||
|
|
||||||
|
redis.multi do
|
||||||
|
keys.each do |key|
|
||||||
|
if match = key.match(regexp)
|
||||||
|
db_name = match[:message_bus] || match[:namespace]
|
||||||
|
|
||||||
|
if !dbs.include?(db_name)
|
||||||
|
redis.del(key)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
break if cursor == 0
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue