خطأ: عدد صحيح خارج النطاق

أعتقد أننا تجاوزنا الخطر الآن!

لاحظنا أننا بحاجة إلى ترحيل الأعمدة في جداول أخرى تشير إلى notification_id بالإضافة إلى notifications.id نفسه. وإلا، فإن services/notifications.rb أو services/badge_granter.rb ستُصدر أخطاء.


بالنسبة لأي إعدادات منتديات كبيرة أخرى تواجه هذا في المستقبل مع الإشعارات، إليك ما فعلناه…

إجمالاً، كان علينا ترحيل أربعة أعمدة في أربعة جداول:

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

لقد بدأنا بالتعامل مع #1 باستخدام أمر ALTER المقترح أعلاه، ولكن بعد ذلك، كما ذكرنا، اخترنا استخدام ترحيلات ActiveRecord، وبهذه الطريقة تضاف ملفات الترحيل إلى المخطط.

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

لدينا Dockerfile مخصص في إعدادنا (نقوم ببناء صور حتى نتمكن من تشغيل discourse و sidekiq على موارد منفصلة في Kubernetes) لذا كان نسخ هذه الملفات إلى /db/migrate كجزء من Dockerfile الخاص بنا أمرًا سهلاً.

بعد ذلك، تركنا rake db:migrate يتعامل مع الباقي. بمجرد إجراء إعادة تشغيل متدرجة لجميع وحدات discourse و sidekiq الخاصة بنا، كان كل شيء يعمل كما هو متوقع :crossed_fingers:.

3 إعجابات