во время Jobs::ProcessPost
Я могу воспроизвести это через командную строку:
в то время как получить к нему доступ успешно можно следующим образом:
Полагаю, это может быть связано с этим:
committed 01:28PM - 23 May 22 UTC
Previously, with the default `editing_grace_period`, hotlinked images were pulle… d 5 minutes after a post is created. This delay was added to reduce the chance of automated edits clashing with user edits.
This commit refactors things so that we can pull hotlinked images immediately. URLs are immediately updated in the post's `cooked` HTML. The post's raw markdown is updated later, after the `editing_grace_period`.
This involves a number of behind-the-scenes changes including:
- Schedule Jobs::PullHotlinkedImages immediately after Jobs::ProcessPost. Move scheduling to after the `update_column` call to avoid race conditions
- Move raw changes into a separate job, which is delayed until after the ninja-edit window
- Move disable_if_low_on_disk_space logic into the `pull_hotlinked_images` job
- Move raw-parsing/replacing logic into `InlineUpload` so it can be easily be shared between `UpdateHotlinkedRaw` and `PullUserProfileHotlinkedImages`
Содержит:
end
end
# onebox may have added some links, so extract them now
def extract_links(post)
TopicLink.extract_from(post)
QuotedPost.extract_from(post)
end
def enqueue_pull_hotlinked_images(post)
Jobs.cancel_scheduled_job(:pull_hotlinked_images, post_id: post.id)
Jobs.enqueue(:pull_hotlinked_images, post_id: post.id)
end
end
end
В данном контексте, не требуется ли здесь ведущий ::?
david
(David Taylor)
26.Май.2022 11:35:59
2
Хм, добавление ведущего :: наверняка исправит это… но это не должно быть обязательным
Учитывая, что вызов происходит изнутри ::Jobs::ProcessPost, Ruby должен подниматься по иерархии. Сначала он поищет ::Jobs::ProcessPost::Jobs, затем ::Jobs::Jobs, а в итоге — модуль ::Jobs.
Ошибка, которую вы видите, указывает на то, что где-то определяется ::Jobs::Jobs… что странно! Проверил на своём локальном окружении:
[1] pry(main)> Jobs::Jobs
=> Jobs::Jobs
[2] pry(main)> Jobs::Jobs.constants
=> [:RemapOldBotImages, :GrantBadges]
Похоже, что эти строки в discourse-narrative-bot вызывают проблемы. Если их закомментировать, проблема исчезает.
if Rails.env == "development"
# workaround, teach reloader to reload jobs
# if we do not do this then
#
# 1. on reload rails goes and undefines Jobs::Base
# 2. as a side effect this undefines Jobs::BotInput
# 3. we have a post_edited hook that queues a job for bot input
# 4. if you are not running sidekiq in dev every time you save a post it will trigger it
# 5. but the constant can not be autoloaded
Rails.configuration.autoload_paths << File.expand_path('../autoload', __FILE__)
end
Хорошая новость в том, что это касается только разработки — связано с несовпадением путей к файлам заданий и названий модулей. Вот PR для исправления ситуации:
main ← narritive-bot-autoload
merged 12:19PM - 26 May 22 UTC
These incorrect paths were causing the regular jobs to be loaded in a `Jobs::Job… s` module in development mode, which would cause various weird issues.
https://meta.discourse.org/t/228155
Спасибо за отчёт @merefield
Ах, да, странно, но теперь понятно, почему продакшн не взорвался!
Спасибо за быстрый ответ!