FIX: Cleanup migrations with timestamps in the future
A future-dated migration was accidently introduced by me in45c399f0
. This was removed inb9762afc
, but other migrations had already been generated based on its incorrect date. This commit removes the offending data in the schema_migrations table, and corrects the version in the published_pages migration. This commit also adds a check to db:migrate which raises an error when invalid migration timestamps are used.
This commit is contained in:
parent
159fc41f40
commit
e29afa200a
|
@ -0,0 +1,25 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddPublicFieldToPublishedPages < ActiveRecord::Migration[6.0]
|
||||
def up
|
||||
# Delete the record of https://github.com/discourse/discourse/commit/b9762afc106ee9b18d1ac33ca3cac281083e428e
|
||||
execute <<~SQL
|
||||
DELETE FROM schema_migrations WHERE version='20201006172700'
|
||||
SQL
|
||||
|
||||
# Delete the reference to the incorrectly versioned version of this migration
|
||||
execute <<~SQL
|
||||
DELETE FROM schema_migrations WHERE version='20201006172701'
|
||||
SQL
|
||||
|
||||
# Using IF NOT EXISTS because the version number of this migration was changed
|
||||
# Therefore some sites may have already added the column
|
||||
execute <<~SQL
|
||||
ALTER TABLE "published_pages" ADD COLUMN IF NOT EXISTS "public" boolean DEFAULT FALSE NOT NULL
|
||||
SQL
|
||||
end
|
||||
|
||||
def down
|
||||
raise ActiveRecord::IrreversibleMigration
|
||||
end
|
||||
end
|
|
@ -1,7 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddPublicFieldToPublishedPages < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :published_pages, :public, :boolean, null: false, default: false
|
||||
end
|
||||
end
|
|
@ -187,6 +187,12 @@ end
|
|||
|
||||
# we need to run seed_fu every time we run rake db:migrate
|
||||
task 'db:migrate' => ['load_config', 'environment', 'set_locale'] do |_, args|
|
||||
migrations = ActiveRecord::Base.connection.migration_context.migrations
|
||||
now_timestamp = Time.now.utc.strftime('%Y%m%d%H%M%S').to_i
|
||||
epoch_timestamp = Time.at(0).utc.strftime('%Y%m%d%H%M%S').to_i
|
||||
|
||||
raise "Migration #{migrations.last.version} is timestamped in the future" if migrations.last.version > now_timestamp
|
||||
raise "Migration #{migrations.first.version} is timestamped before the epoch" if migrations.first.version < epoch_timestamp
|
||||
|
||||
ActiveRecord::Tasks::DatabaseTasks.migrate
|
||||
|
||||
|
|
Loading…
Reference in New Issue