{“progress”: "דוח ההתקדמות עד כה:
-
אושר שבשיטות הרשימה הסטטיות
TopicQueryכמוadd_custom_param_handlerאוextra_options_whitelistלא קיימות כמתודות מחלקה בגרסת Discourse שלי, ולכן גישות אלה נדחו. -
יישמתי תיקון ל-
ListController#build_topic_list_optionsכדי להכניס את פרמטרי ה-URL המותאמים שלי (כמוmarket_item_statuses,market_price_min) לתוך מילוןoptsלפני קריאתTopicQuery.new. -
זה עכשיו עובד! כאשר אני מבצע בקשה כמו
/c/market/5/l/latest.json?filter=defaultmarket_item_statuses=Available, היומנים בשרת מאשרים את ההכנסה:[TecencMarket_ListControllerExt_BuildOptsV3] הוכנס ל-opts: market_item_statuses = Availableלכן,
TopicQuery.new(user, opts)מקבל כעת אתoptsהכולל את הפרמטרים המותאמים שלי.
נקודת תקיעות נוכחית: שגיאת 500 וחסימת הפילטר
למרות שהפרמטרים מעוברים כראוי ל-TopicQuery ב-Iinitialiser, עדיין אני מקבל שגיאת 500 פנימית בשרת כאשר הבקשה כוללת את פרמטרי השוק המותאמים.
לבודד את הבעיה, הפשטתי את בלוק ה-add_custom_filter(:"tecenc_market_filters") ל-Minimum.
# plugin.rb - בלוק הפילטר המותאם הפשוט הנוכחי
if ::TopicQuery.respond_to?(:add_custom_filter)
::TopicQuery.add_custom_filter(:"tecenc_market_filters") do |topics, topic_query|
original_topics_relation = topics
opts = topic_query.options
log_prefix_query = "[TecencMarket_SimplifiedFilter_V1.1_Test]" # קידומת ניהול debug שלי
Rails.logger.info "#{log_prefix_query} ה-Opts שהתקבלו מ-TopicQuery: #{opts.inspect}"
if opts[:market_item_statuses].present?
Rails.logger.info "#{log_prefix_query} 'market_item_statuses' קיימים ב-opts: #{opts[:market_item_statuses]}"
else
Rails.logger.info "#{log_prefix_query} 'market_item_statuses' אינו קיים ב-opts."
end
Rails.logger.info "#{log_prefix_query} מחזיר את יחס הנושאים המקורי."
original_topics_relation # החזרה אוטומטית
end
Rails.logger.info "[TecencMarket] הוחל הפילטר המותאם הפשוט (V1.1_Test)."
end
הערות עם הפילטר הפשוט הזה:
-
בקשות בלי פרמטר הפילטר המותאם שלי (למשל
/c/market/5/l/latest.json?filter=default):-
הלוג של הפילטר הפשוט מתרחש כראוי:
[TecencMarket_SimplifiedFilter_V1.1_Test] ה-Opts שהתקבלו מ-TopicQuery: {:category=>5, :filter=>"default", ...} [TecencMarket_SimplifiedFilter_V1.1_Test] 'market_item_statuses' אינו קיים ב-opts. [TecencMarket_SimplifiedFilter_V1.1_Test] מחזיר את יחס הנושאים המקורי. -
הדף נטען ב-200 OK.
-
-
בקשות עם פרמטר הפילטר המותאם שלי (כמו
/c/market/5/l/latest.json?filter=defaultmarket_item_statuses=Available):-
הלוג של ה- ListController מופיע:
[TecencMarket_ListControllerExt_BuildOptsV3] הוכנס ל-opts: market_item_statuses = Available -
שגיאת
Completed 500 Internal Server Error in ...msמתרחשת מייד לאחר מכן. -
באופן קריטי, אין לוגים מתוך בלוק הפילטר המפושט (אין שורות
[TecencMarket_SimplifiedFilter_V1.1_Test]...) שמופיעות עבור בקשת הכישלון הזו.
-
זה מציין שהשגיאה 500 מתרחשת אחרי ש-TopicQuery מאותחל עם מערך ההגדרות opts (שכעת מכיל את הפרמטרים ההתאמיים שלי), אבל לפני או בדיוק כאשר מנגנון TopicQuery#apply_custom_filters של Discourse מנסה להריץ את בלוק הפילטר שהרשמתי (ונראה פשוט מאוד עכשיו).
אני נתקל בקושי לבודד את החריג Ruby המדויק ואת תצוגת מחזיר הקריאות המלאה מתוך development.log שקודמים ישירות לשורה “Completed 500…” עבור הבקשות הכושלות (הקטעים שהאספתי מראים את שורת 500 עצמה, אך לא את הודעת השגיאה המפורטת שלפניה).
שאלה המשך:
בהינתן ש:
-
פרמטרים מותאמים אישית מוזרמים בהצלחה ל-
TopicQuery.optionsבאמצעות פאץ’ListController. -
שגיאת 500 מתרחשת כאשר פרמטרים אלה קיימים ב-
opts. -
השגיאה 500 מתרחשת לפני שהבלוק הפילטר המותאם מאוד (שפשוט לוג ומחזיר את היחס ההתחלתי) מתבצע בכלל.
-
זה על Discourse
3.5.0.beta3-dev.
מה עלול לגרום ל-TopicQuery או ל-apply_custom_filters שלה להשמיט שגיאה לפני קריאת הבלוק המותאם באופן ספציפי כאשר במילון options קיימות מפתחות של תוסף כזה או אחר? האם הבעיה הקודמת של LocalJumpError שהשערנו עדיין רלוונטית ברמה נמוכה יותר בעניין טיפול בלולאת קריאות או קריאה של בלוקי מסנן, גם אם הבלוק הפשטני שלי הוא פשוט החזרה אוטומטית?
כל הכוונה על מה לבדוק בהמשך בהתנהגות של TopicQuery עם סוגי אפשרויות מותאמות אישית, או עצות כיצד להשיג תצוגת מחזיר הקריאות המלאה באופן אמין יותר לשגיאת ה-500 במצב זה, יהיו לעזר רב.