diff --git a/app/jobs/regular/detect_translate_post.rb b/app/jobs/regular/detect_translate_post.rb index c7d697c5..7853e8e7 100644 --- a/app/jobs/regular/detect_translate_post.rb +++ b/app/jobs/regular/detect_translate_post.rb @@ -20,6 +20,8 @@ def execute(args) begin DiscourseTranslator::PostTranslator.translate(post, locale) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to translate post #{post.id} to #{locale}: #{e.message}", diff --git a/app/jobs/regular/detect_translate_topic.rb b/app/jobs/regular/detect_translate_topic.rb index a1c03cec..b3c5d290 100644 --- a/app/jobs/regular/detect_translate_topic.rb +++ b/app/jobs/regular/detect_translate_topic.rb @@ -22,6 +22,8 @@ def execute(args) begin DiscourseTranslator::TopicTranslator.translate(topic, locale) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to translate topic #{topic.id} to #{locale}: #{e.message}", diff --git a/app/jobs/regular/translate_categories.rb b/app/jobs/regular/translate_categories.rb index 8449b57f..f79e5ff7 100644 --- a/app/jobs/regular/translate_categories.rb +++ b/app/jobs/regular/translate_categories.rb @@ -26,6 +26,8 @@ def execute(args) next if CategoryLocalization.exists?(category_id: category.id, locale: locale) begin DiscourseTranslator::CategoryTranslator.translate(category, locale) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to translate category #{category.id} to #{locale}: #{e.message}", diff --git a/app/jobs/regular/translate_posts.rb b/app/jobs/regular/translate_posts.rb index 89a05c30..21806c50 100644 --- a/app/jobs/regular/translate_posts.rb +++ b/app/jobs/regular/translate_posts.rb @@ -35,6 +35,8 @@ def execute(args) posts.each do |post| begin DiscourseTranslator::PostTranslator.translate(post, locale) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to translate post #{post.id} to #{locale}: #{e.message}", diff --git a/app/jobs/regular/translate_topics.rb b/app/jobs/regular/translate_topics.rb index a2ba4033..a3775b96 100644 --- a/app/jobs/regular/translate_topics.rb +++ b/app/jobs/regular/translate_topics.rb @@ -34,6 +34,8 @@ def execute(args) topics.each do |topic| begin DiscourseTranslator::TopicTranslator.translate(topic, locale) + rescue FinalDestination::SSRFDetector::LookupFailedError + # do nothing, there are too many sporadic lookup failures rescue => e Rails.logger.error( "Discourse Translator: Failed to translate topic #{topic.id} to #{locale}: #{e.message}", diff --git a/app/services/discourse_translator/post_locale_detector.rb b/app/services/discourse_translator/post_locale_detector.rb index ee264d5e..9cee4d6e 100644 --- a/app/services/discourse_translator/post_locale_detector.rb +++ b/app/services/discourse_translator/post_locale_detector.rb @@ -8,7 +8,7 @@ def self.detect_locale(post) translator = DiscourseTranslator::Provider::TranslatorProvider.get detected_locale = translator.detect!(post) locale = LocaleNormalizer.normalize_to_i18n(detected_locale) - post.update!(locale:) + post.update_column(:locale, locale) locale end end diff --git a/spec/services/post_locale_detector_spec.rb b/spec/services/post_locale_detector_spec.rb index bcb15392..69470fc3 100644 --- a/spec/services/post_locale_detector_spec.rb +++ b/spec/services/post_locale_detector_spec.rb @@ -23,5 +23,14 @@ "zh_CN", ) end + + it "bypasses validations when updating locale" do + post.update_column(:raw, "A") + + translator.stubs(:detect!).with(post).returns("zh_CN") + + described_class.detect_locale(post) + expect(post.reload.locale).to eq("zh_CN") + end end end