Fehler: Ganzzahl außerhalb des Bereichs

Ich glaube, wir sind jetzt aus dem Schneider!

Wir haben festgestellt, dass wir neben notifications.id auch Spalten in anderen Tabellen migrieren mussten, die auf notification_id verwiesen. Andernfalls würden services/notifications.rb oder services/badge_granter.rb Fehler auslösen.


Für jedes andere große Forum-Setup, das in Zukunft auf dieses Problem mit Benachrichtigungen stößt, hier ist, was wir getan haben…

Insgesamt mussten wir vier Spalten in vier Tabellen migrieren:

  1. notifications.id
  2. user.seen_notification_id
  3. user_badges.notification_id
  4. shelved_notifications.notification_id

Wir haben zuerst #1 mit dem oben vorgeschlagenen ALTER-Befehl durchgeführt, aber dann, wie erwähnt, entschieden, ActiveRecord-Migrationen zu verwenden, damit die Migrationsdateien zum Schema hinzugefügt werden.

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

Wir haben in unserem Setup eine benutzerdefinierte Dockerfile (wir erstellen Images, damit wir Discourse und Sidekiq auf separaten Ressourcen in Kubernetes ausführen können), daher war das Kopieren dieser Dateien in /db/migrate als Teil unserer Dockerfile unkompliziert.

Dann ließen wir einfach rake db:migrate den Rest erledigen. Nachdem wir einen Rolling-Restart aller unserer Discourse- und Sidekiq-Pods durchgeführt hatten, lief alles wie erwartet :crossed_fingers:.

3 „Gefällt mir“