Penso che ora siamo fuori pericolo!
Abbiamo notato che era necessario migrare le colonne in altre tabelle che facevano riferimento a notification_id oltre a notifications.id stesso. Altrimenti, services/notifications.rb o services/badge_granter.rb avrebbero generato errori.
Per qualsiasi altro grande setup di forum che si imbatta in questo in futuro con le notifiche, ecco cosa abbiamo fatto…
In totale, abbiamo dovuto migrare quattro colonne in quattro tabelle:
notifications.id
user.seen_notification_id
user_badges.notification_id
shelved_notifications.notification_id
Inizialmente abbiamo proceduto con il comando ALTER suggerito sopra per il punto 1, ma poi, come menzionato, abbiamo optato per utilizzare le migrazioni ActiveRecord, in modo che i file di migrazione si aggiungano allo schema.
20230215070319_change_notifications_id_to_bigint.rb
# frozen_string_literal: true
class ChangeNotificationsIdToBigint < ActiveRecord::Migration[6.1]
def change
change_column :notifications, :id, :bigint
end
end
20230215070320_change_user_seen_notification_id_to_bigint.rb
# frozen_string_literal: true
class ChangeUserSeenNotificationIdToBigint < ActiveRecord::Migration[6.1]
def change
change_column :users, :seen_notification_id, :bigint
end
end
20230215070321_change_user_badges_notification_id_to_bigint.rb
# frozen_string_literal: true
class ChangeUserBadgesNotificationIdToBigint < ActiveRecord::Migration[6.1]
def change
change_column :user_badges, :notification_id, :bigint
end
end
20230215070322_change_shelved_notifications_notification_id_to_bigint.rb
# frozen_string_literal: true
class ChangeShelvedNotificationsNotificationIdToBigint < ActiveRecord::Migration[6.1]
def change
change_column :shelved_notifications, :notification_id, :bigint
end
end
Abbiamo un Dockerfile personalizzato nel nostro setup (costruiamo immagini in modo da poter eseguire discourse e sidekiq su risorse separate in Kubernetes), quindi copiare questi file in /db/migrate come parte del nostro Dockerfile è stato semplice.
Poi, abbiamo semplicemente lasciato che rake db:migrate facesse il resto. Una volta eseguito un riavvio graduale di tutti i nostri pod discourse e sidekiq, tutto funzionava come previsto
.