selase
(Selase Krakani)
19 مايو 2025، 2:44م
21
ليس لدي التتبع الكامل، لكنني أعتقد أن الخطأ يحدث أثناء تسلسل gamification_score لبطاقة المستخدم.
نظرًا للطبيعة العابرة لهذه المشاهدات المجسدة، لا يُتوقع أن يتسبب البحث عن النقاط في حدوث خطأ على مستوى النظام، بل يجب أن يعود إلى “نقاط افتراضية” عند عدم وجود المشاهدة.
هناك خطأ في التحقق من وجود المشاهدة المجسدة التحقق من الوجود . يُبلغ عن وجود مشهدة بينما هي في الواقع غير موجودة (على الأقل ليس في مخطط public الحالي)، مما يؤدي إلى البحث في مشهدة غير موجودة ينتج عنه الخطأ.
أعتقد أن ما حدث هنا هو أن المشاهدة المجسدة كانت موجودة في مخطط backup الذي تم إنشاؤه كجزء من الاستعادة ولكن ليس في مخطط public. يتم الاحتفاظ بمخطط backup لفترة من الوقت بعد الاستعادة.
.includes(:flair_upload)
.all
.map { |group| BasicGroupSerializer.new(group, root: false, scope: self.scope).as_json },
gamification_leaderboards:
DiscourseGamification::GamificationLeaderboard.all.map do |leaderboard|
LeaderboardSerializer.new(leaderboard, root: false).as_json
end,
}
end
add_to_serializer(:user_card, :gamification_score) { object.gamification_score }
add_to_serializer(:site, :default_gamification_leaderboard_id) do
DiscourseGamification::GamificationLeaderboard.first&.id
end
SeedFu.fixture_paths << Rails
.root
.join("plugins", "discourse-gamification", "db", "fixtures")
.to_s
on(:site_setting_changed) do |name|
DEFAULT_SCORE = 0
def gamification_score
return DEFAULT_SCORE if !default_leaderboard
DiscourseGamification::GamificationLeaderboard.find_position_by(
leaderboard_id: default_leaderboard.id,
period: "all_time",
for_user_id: self.id,
)&.total_score || DEFAULT_SCORE
rescue DiscourseGamification::LeaderboardCachedView::NotReadyError
Jobs.enqueue(Jobs::GenerateLeaderboardPositions, leaderboard_id: default_leaderboard.id)
DEFAULT_SCORE
end
def default_leaderboard
@default_leaderboard ||= DiscourseGamification::GamificationLeaderboard.select(:id).first
end
end
end
def scores(period: "all_time", page: 0, for_user_id: false, limit: nil, offset: nil)
user_filter_condition = for_user_id ? ["users.id = ?", for_user_id] : [nil]
if mview_exists?(period)
User
.where(*user_filter_condition)
.joins("INNER JOIN #{mview_name(period)} p ON p.user_id = users.id")
.select(
"users.id, users.name, users.username, users.uploaded_avatar_id, p.total_score, p.position",
)
.limit(limit)
.offset(offset)
.order(position: :asc, id: :asc)
.load
else
raise NotReadyError.new(I18n.t("errors.leaderboard_positions_not_ready"))
end
end
لدي طلب سحب جاهز مع إصلاح.
main ← fix/materialized-view-presence-check
opened 02:16PM - 19 May 25 UTC
Currently, `mview_exists?` returns true if the materialized view existed anywher… e in the database, regardless of the schema. This caused issues after backup restores, where the views may exist in the `backup` schema created during the restore but not in the current public schema.
This change ensures the check is scoped to the current schema.
3 إعجابات