工作异常:Holidays::InvalidRegion

我刚开始接触 Discourse 的故障排除,所以不确定从哪里入手。

这大约在一个月前开始的。我现在有 4347 个 Job exception: Holidays::InvalidRegion 实例。

/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays/finder/context/parse_options.rb:83:in `block in validate!'
/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays/finder/context/parse_options.rb:82:in `each'
/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays/finder/context/parse_options.rb:82:in `validate!'
/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays/finder/context/parse_options.rb:41:in `parse_regions!'
/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays/finder/context/parse_options.rb:20:in `call'
/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays/finder/context/between.rb:14:in `call'
/var/www/discourse/plugins/discourse-calendar/vendor/holidays/lib/holidays.rb:49:in `between'
/var/www/discourse/plugins/discourse-calendar/app/services/discourse_calendar/holiday.rb:14:in `find_holidays_for'
/var/www/discourse/plugins/discourse-calendar/jobs/scheduled/create_holiday_events.rb:68:in `block in execute'
/var/www/discourse/plugins/discourse-calendar/jobs/scheduled/create_holiday_events.rb:66:in `each'
/var/www/discourse/plugins/discourse-calendar/jobs/scheduled/create_holiday_events.rb:66:in `execute'
/var/www/discourse/app/jobs/base.rb:318:in `block (2 levels) in perform'
rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `with_connection'
/var/www/discourse/app/jobs/base.rb:305:in `block in perform'
/var/www/discourse/app/jobs/base.rb:301:in `each'
/var/www/discourse/app/jobs/base.rb:301:in `perform'
/var/www/discourse/app/jobs/base.rb:381:in `perform'
mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'

环境

hostname	discourse-app
process_id	3072273
application_version	66f53ac5b9c7fdcd53868ccabac310b13ffc8910
current_db	default
current_hostname	discourse.------------.net
job	DiscourseCalendar::CreateHolidayEvents
problem_db	default
time	2:53 pm
	
opts	

我们没有修改 discourse-calendar 插件。

有人能给我指个方向吗?

这可能是由于最近对节假日定义进行了更新,这可能导致生成的地区列表发生了变化,但未更新用户现有的日历地区偏好设置。

当用户之前选择了一个现已移除的地区作为其日历地区时,就会出现此错误。

您之所以看到大量异常,是因为触发此错误的计划任务每 10 分钟运行一次。

我们需要更优雅地处理此问题,方法是考虑那些从生成的地区列表中移除地区的节假日定义更新。

1 个赞

很有意思!我可以肯定地说,我们的用户群非常国际化,所以这可能说得通。

我是否可以认为:1) 我对此无能为力,2) 这其实无关紧要?或者我需要提交一个 bug 报告?

谢谢。

我已将此主题移至 Bug,因此无需再次报告。

由于我们实际上并未删除任何主要地区 在此处,我怀疑问题与州或地区级别的地区定义有关,类似于您在美国看到的以下内容:

更改最有可能发生在以下两个提交之间:

这取决于您对深入研究内部的熟悉程度。您需要:

  1. 识别已设置日历地区偏好的用户。
  2. 检查其中哪些值不在当前有效地区列表中:
    REGIONS.rb
  3. 将这些用户的地区偏好更新为有效的顶级地区。例如,像 United States (us_id) 这样的偏好设置应更改为 United States

如果您的网站使用节假日日历事件,那确实很重要。对于受影响的用户,在修复其日历地区之前,不会生成任何节假日事件。

2 个赞

谢谢!感谢您的帮助。

我正在调查同样的问题,因为我们的内部 discourse 实例错误激增,所以我修复了它 :wink:

3 个赞

太棒了!谢谢。