Migration warning helper, and only run in production env (#24253)
parent
e633b26f4f
commit
b9e34ef098
4 changed files with 77 additions and 47 deletions
@ -0,0 +1,55 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
module Mastodon |
||||
module MigrationWarning |
||||
WARNING_SECONDS = 10 |
||||
|
||||
DEFAULT_WARNING = <<~WARNING_MESSAGE |
||||
WARNING: This migration may take a *long* time for large instances. |
||||
It will *not* lock tables for any significant time, but it may run |
||||
for a very long time. We will pause for #{WARNING_SECONDS} seconds to allow you to |
||||
interrupt this migration if you are not ready. |
||||
WARNING_MESSAGE |
||||
|
||||
def migration_duration_warning(explanation = nil) |
||||
return unless valid_environment? |
||||
|
||||
announce_warning(explanation) |
||||
|
||||
announce_countdown |
||||
end |
||||
|
||||
private |
||||
|
||||
def announce_countdown |
||||
WARNING_SECONDS.downto(1) do |i| |
||||
say "Continuing in #{i} second#{i == 1 ? '' : 's'}...", true |
||||
sleep 1 |
||||
end |
||||
end |
||||
|
||||
def valid_environment? |
||||
$stdout.isatty && Rails.env.production? |
||||
end |
||||
|
||||
def announce_warning(explanation) |
||||
announce_message prepare_message(explanation) |
||||
end |
||||
|
||||
def announce_message(text) |
||||
say '' |
||||
text.each_line do |line| |
||||
say(line) |
||||
end |
||||
say '' |
||||
end |
||||
|
||||
def prepare_message(explanation) |
||||
if explanation.blank? |
||||
DEFAULT_WARNING |
||||
else |
||||
DEFAULT_WARNING + "\n#{explanation}" |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue