FIX: Migrate old null override for upload site settings.

approved

#1

FIX: Migrate old null override for upload site settings.

For some reason, setting a text site setting to empty in the past can result in either an empty string or null as the value. This migration is a follow up to 1981add261aacc279c26f5e684ae4a080607e73f.

diff --git a/db/migrate/20190315055432_migrate_null_override_for_upload_site_settings.rb b/db/migrate/20190315055432_migrate_null_override_for_upload_site_settings.rb
new file mode 100644
index 0000000..bbc4780
--- /dev/null
+++ b/db/migrate/20190315055432_migrate_null_override_for_upload_site_settings.rb
@@ -0,0 +1,40 @@
+class MigrateNullOverrideForUploadSiteSettings < ActiveRecord::Migration[5.2]
+  def up
+    {
+      'logo_url' => 'logo',
+      'logo_small_url' => 'logo_small',
+      'digest_logo_url' => 'digest_logo',
+      'mobile_logo_url' => 'mobile_logo',
+      'large_icon_url' => 'large_icon',
+      'favicon_url' => 'favicon',
+      'apple_touch_icon_url' => 'apple_touch_icon',
+      'default_opengraph_image_url' => 'opengraph_image',
+      'twitter_summary_large_image_url' => 'twitter_summary_large_image',
+      'push_notifications_icon_url' => 'push_notifications_icon'
+    }.each do |old_name, new_name|
+      if DB.query_single("SELECT 1 FROM site_settings WHERE name = '#{old_name}' AND value IS NULL").present? &&
+         DB.query_single("SELECT 1 FROM site_settings WHERE name = '#{new_name}'").empty?
+
+        ActiveRecord::Base.connection.execute <<~SQL
+        INSERT INTO site_settings (
+          name,
+          data_type,
+          value,
+          created_at,
+          updated_at
+        ) VALUES (
+          '#{new_name}',
+          18,
+          '',
+          CURRENT_TIMESTAMP,
+          CURRENT_TIMESTAMP
+        )
+        SQL
+      end
+    end
+  end
+
+  def down
+    raise ActiveRecord::IrreversibleMigration
+  end
+end

GitHub sha: cb1f909f


FIX: Migrate old blank override for upload site settings.
#2

This commit has been mentioned on Discourse Meta. There might be relevant details there:


Approved #3