diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2018-01-02 12:33:42 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2018-01-02 12:33:42 +0000 |
commit | 81dcd8ed8f71968215c7e776da482e83823c8b74 (patch) | |
tree | fdc1ab89e688b4bf2812007b8c84cf2b539bc850 | |
parent | 91864a92b9821f43c4551f96c6af8dff49bbedaa (diff) | |
parent | d2ebc9b931d12cb2cb120d6f7c940744bc1be39c (diff) | |
download | gitlab-ce-81dcd8ed8f71968215c7e776da482e83823c8b74.tar.gz |
Merge branch '39289-local-schema-rb-automatically-reverts-datetime-to-datetime_with_timezone-after-migrations' into 'master'
Prevent schema.rb reverting from datetime_with_timezone to datetime
Closes #39289
See merge request gitlab-org/gitlab-ce!14956
-rw-r--r-- | config/initializers/active_record_data_types.rb | 5 | ||||
-rw-r--r-- | db/migrate/20171019141859_fix_dev_timezone_schema.rb | 25 | ||||
-rw-r--r-- | db/schema.rb | 8 |
3 files changed, 34 insertions, 4 deletions
diff --git a/config/initializers/active_record_data_types.rb b/config/initializers/active_record_data_types.rb index fef591c397d..0359e14b232 100644 --- a/config/initializers/active_record_data_types.rb +++ b/config/initializers/active_record_data_types.rb @@ -79,3 +79,8 @@ elsif Gitlab::Database.mysql? NATIVE_DATABASE_TYPES[:datetime_with_timezone] = { name: 'timestamp' } end end + +# Ensure `datetime_with_timezone` columns are correctly written to schema.rb +if (ActiveRecord::Base.connection.active? rescue false) + ActiveRecord::Base.connection.send :reload_type_map +end diff --git a/db/migrate/20171019141859_fix_dev_timezone_schema.rb b/db/migrate/20171019141859_fix_dev_timezone_schema.rb new file mode 100644 index 00000000000..fb7c17dd747 --- /dev/null +++ b/db/migrate/20171019141859_fix_dev_timezone_schema.rb @@ -0,0 +1,25 @@ +class FixDevTimezoneSchema < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + # The this migrations tries to help solve unwanted changes to `schema.rb` + # while developing GitLab. Installations created before we started using + # `datetime_with_timezone` are likely to face this problem. Updating those + # columns to the new type should help fix this. + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + TIMEZONE_TABLES = %i(appearances ci_group_variables ci_pipeline_schedule_variables events gpg_keys gpg_signatures project_auto_devops) + + def up + return unless Rails.env.development? || Rails.env.test? + + TIMEZONE_TABLES.each do |table| + change_column table, :created_at, :datetime_with_timezone + change_column table, :updated_at, :datetime_with_timezone + end + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index aa5db5da4f0..88885f706b7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -657,8 +657,8 @@ ActiveRecord::Schema.define(version: 20171220191323) do t.datetime "created_at" t.datetime "updated_at" t.string "confirmation_token" - t.datetime "confirmed_at" - t.datetime "confirmation_sent_at" + t.datetime_with_timezone "confirmed_at" + t.datetime_with_timezone "confirmation_sent_at" end add_index "emails", ["confirmation_token"], name: "index_emails_on_confirmation_token", unique: true, using: :btree @@ -1770,8 +1770,8 @@ ActiveRecord::Schema.define(version: 20171220191323) do add_index "user_agent_details", ["subject_id", "subject_type"], name: "index_user_agent_details_on_subject_id_and_subject_type", using: :btree create_table "user_custom_attributes", force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime_with_timezone "created_at", null: false + t.datetime_with_timezone "updated_at", null: false t.integer "user_id", null: false t.string "key", null: false t.string "value", null: false |