discourse/db/fixtures/001_categories.rb
Guo Xiang Tan ffc97f2298 FIX: Wait 30 days before dropping the column.
* Regressions from the past is resulting in `logo_url` with
  no uploads record.
2016-12-15 22:45:04 +08:00

50 lines
1.8 KiB
Ruby

# fix any bust caches post initial migration
ActiveRecord::Base.send(:subclasses).each { |m| m.reset_column_information }
SiteSetting.refresh!
uncat_id = SiteSetting.uncategorized_category_id
uncat_id = -1 unless Numeric === uncat_id
if uncat_id == -1 || !Category.exists?(uncat_id)
puts "Seeding uncategorized category!"
result = Category.exec_sql "SELECT 1 FROM categories WHERE lower(name) = 'uncategorized'"
name = 'Uncategorized'
name << SecureRandom.hex if result.count > 0
result = Category.exec_sql "INSERT INTO categories
(name,color,slug,description,text_color, user_id, created_at, updated_at, position, name_lower)
VALUES ('#{name}', 'AB9364', 'uncategorized', '', 'FFFFFF', -1, now(), now(), 1, '#{name.downcase}' )
RETURNING id
"
category_id = result[0]["id"].to_i
Category.exec_sql "DELETE FROM site_settings where name = 'uncategorized_category_id'"
Category.exec_sql "INSERT INTO site_settings(name, data_type, value, created_at, updated_at)
VALUES ('uncategorized_category_id', 3, #{category_id}, now(), now())"
end
# 60 minutes after our migration runs we need to exectue this code...
duration = Rails.env.production? ? 30 : 0
if Category.exec_sql("
SELECT 1 FROM schema_migration_details
WHERE EXISTS(
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'public' AND table_name = 'categories' AND column_name = 'logo_url'
) AND
name = 'AddUploadsToCategories' AND
created_at < (current_timestamp at time zone 'UTC' - interval '#{duration} days')
").to_a.length > 0
Category.transaction do
STDERR.puts "Removing superflous category columns!"
%w[
logo_url
background_url
].each do |column|
Category.exec_sql("ALTER TABLE categories DROP column IF EXISTS #{column}")
end
end
end