mirror of
https://github.com/discourse/discourse.git
synced 2025-03-25 18:06:39 +08:00
FIX: Cleanup migrations with timestamps in the future
A future-dated migration was accidently introduced by me in 45c399f0. This was removed in b9762afc, 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…
x
Reference in New Issue
Block a user