Ember 비추천 경고: Translator 플러그인 관련

이 플러그인에 대해 Ember 비추천(deprecation) 경고가 표시되고 있습니다…

`
DEPRECATION: [PLUGIN discourse-translator-085393fc180a351d3e74518ec7971e580d749bf93686b725cf4995ffeeb614ba] Ember Global 사용은 비추천됩니다. 대신 Ember 모듈 또는 특정 API를 가져와야 합니다. [deprecation id: ember-global] 자세한 내용은 Ember.js - Deprecations 을 참조하세요.
(anonymous) @ deprecate-shim.js:33

플러그인의 최신 버전(1.0.0)을 사용하고 있는 것으로 보이므로, Ember5 Day 전에 업데이트가 제공될 것으로 예상합니다.

@packman 님, 보고해 주셔서 감사합니다. 이 플러그인의 최신 버전에서는 해당 경고가 발생하지 않아야 합니다. 또한, 플러그인 이름 끝에 이 무작위 문자열이 포함된 것은 일반적으로 예상하지 못한 상황입니다:

단순히 [PLUGIN discourse-translator]만 표시될 것으로 예상합니다. :thinking:

혹시 플러그인의 포크된 버전을 사용 중이신가요? 확인해 볼 수 있도록 포럼 링크를 공유해 주시겠어요?

죄송합니다… 포크된 버전을 사용 중이었습니다. 바로 GitHub - LibreTranslate/discourse-translator: Discourse translator with LibreTranslate support. · GitHub 의 버전입니다.

왜 그 버전을 사용했는지 기억해봐야겠네요.

왜인지 기억합니다. 공식 번역 플러그인이 LibreTranslate를 지원하지 않거든요 :frowning:

LibreTranslate 포크 플러그인의 지원 포럼 회원이신 분이라면, 이 비추천(deprecation) 경고에 대해 게시글을 작성해 주시겠습니까? 포크된 GitHub에서는 이슈를 제기할 수 없는 것 같고, 제가 직접 보고하려고 포럼에 가입을 시도해 봤는데 계정 생성 확인 메일이 도착하지 않습니다.

공식 저장소에 LibreTranslate 지원을 추가하기 위한 (매우 오래된 PR, 죄송합니다! :sweat:) PR이 있는 것 같습니다. 최대한 빨리 머지되도록 노력할 것이며, 이후에는 Ember 5를 지원하는 공식 플러그인 복사본으로 전환할 수 있을 것입니다.

드디어 머지되었습니다. 긴 지연으로 인해 다시 한번 죄송합니다. 간단한 테스트 결과, LibreTranslate는 유료 서비스의 훌륭한 오픈소스 대안으로 보입니다.

(OP 설명도 업데이트하겠습니다.)

맞습니다 :grinning: 그냥 또 다른 Docker 앱일 뿐인데, 아주 가볍지는 않습니다.

포크된 버전 대신 새로운 공식 플러그인을 설치했지만 번역이 전혀 이루어지지 않습니다. 이전에 번역되어 있던 것으로 확신하는 오래된 게시물을 확인했고, 기본 언어가 영어인 상태에서 프랑스어 텍스트로 새 주제도 작성해 보았지만, 기존 번역은 더 이상 존재하지 않으며 새 게시물도 번역되지 않습니다.

번역기로 LibreTranslate를 설정하고 내부 인스턴스 경로를 지정했으며, API 키는 비워 두었습니다(내부 인스턴스이므로). 분당 최대 번역 횟수는 기본값인 3으로 설정되어 있습니다. 두 개의 ‘restrict’ 설정을 모두 'everyone’으로 설정하여 모든 사용자가 번역할 수 있고 모든 사용자의 게시물이 번역되도록 했습니다. 해당 설정의 표현이 다소 혼란스럽습니다(restrict와 allowlist의 차이) 때문에 이것이 정확히 맞는지 확신은 없지만, 두 필드를 모두 비워 두어도 여전히 번역이 보이지 않습니다. 플러그인은 인라인 번역이 활성화되어 있습니다.

LibreTranslate 인스턴스 자체의 웹 인터페이스를 통해 테스트해 보니, 제가 입력한 영어 외 텍스트는 정상적으로 번역됩니다.

공식 플러그인을 설치한 이후로 번역기와 관련된 오류가 로그에 기록된 것을 볼 수 없으며, JavaScript 콘솔에도 오류가 표시되지 않습니다.

다음에 어떤 부분을 확인해야 이 문제를 디버깅할 수 있을지 모르겠습니다.

/logs에 관련 오류가 있나요?

아니요. discourse-translator 항목에 포함된 것은 비권장(deprecation) 경고뿐입니다:

비권장 공지: SiteSetting.min_trust_to_flag_posts는 비권장되었습니다. 대신 SiteSetting.flag_post_allowed_groups를 사용하세요. (Discourse 3.3에서 제거됨)
At /var/www/discourse/lib/site_setting_extension.rb:202:in public_send

해당 경보는 아래 HTTP Referrer와 관련이 있습니다:

https://discourse.weather-watch.com/admin/site_settings/category/all_results?filter=plugin%3Adiscourse-translator

따라서 이것이 실제로 플러그인 자체인지, 아니면 시스템 플러그인 인터페이스인지 100% 확신할 수 없습니다.

기본 ‘restrict’ 설정으로 다른 메시지를 시도해 보았더니 다음 결과가 나왔습니다

### Message (2 copies reported)

Job exception: uninitialized constant DiscourseTranslator::LibreTranslate

### Backtrace

activesupport-7.0.7/lib/active_support/inflector/methods.rb:278:in `const_get'

activesupport-7.0.7/lib/active_support/inflector/methods.rb:278:in `constantize'

activesupport-7.0.7/lib/active_support/core_ext/string/inflections.rb:74:in `constantize'

/var/www/discourse/plugins/discourse-translator/plugin.rb:125:in `block in execute'

/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'

/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'

/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'

/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'

/var/www/discourse/plugins/discourse-translator/plugin.rb:124:in `execute'

/var/www/discourse/app/jobs/base.rb:292:in `block (2 levels) in perform'

rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'

/var/www/discourse/app/jobs/base.rb:279:in `block in perform'

/var/www/discourse/app/jobs/base.rb:275:in `each'

/var/www/discourse/app/jobs/base.rb:275:in `perform'

sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'

sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'

sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'

sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'

sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'

sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'

sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'

sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'

sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'

sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'

sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'

sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'

sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'

sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

### Env

1/2

hostname hv1-app
process_id 11330
application_version 0513865c3cbbf8449bcfdc0dff3d9c382d2c4207
current_db default
current_hostname discourse.weather-watch.com
job Jobs::DetectTranslation
problem_db default
time 10:03 pm
opts post_id 574164
--- --- --- ---
--- ---
current_site_id default

네, 이 문제가 뭔지 알고 있습니다. 수정하고 있습니다.

로그가 지금 쏟아지고 있습니다… 왜 갑자기 나타나는지 모르겠네요. 전에 없었는데 말이죠. 여기(영국)는 이제 늦은 시간이라 오늘 밤으로는 이게 마지막 게시글이 될 것 같습니다. 더 정보가 필요하시면 내일 다시 올게요.

Message (3 copies reported)
NameError (uninitialized constant DiscourseTranslator::LibreTranslate)
(eval):111:in `_fast_attributes'
app/serializers/post_stream_serializer_mixin.rb:54:in `block in posts'
app/serializers/post_stream_serializer_mixin.rb:47:in `map'
app/serializers/post_stream_serializer_mixin.rb:47:in `posts'
app/serializers/post_stream_serializer_mixin.rb:18:in `post_stream'
(eval):3:in `_fast_attributes'
app/controllers/topics_controller.rb:1335:in `block (2 levels) in perform_show_response'
app/controllers/topics_controller.rb:1329:in `perform_show_response'
app/controllers/topics_controller.rb:187:in `show'
app/controllers/application_controller.rb:422:in `block in with_resolved_locale'
app/controllers/application_controller.rb:422:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:233:in `call'
Backtrace
activesupport (7.0.7) lib/active_support/inflector/methods.rb:278:in `const_get'
activesupport (7.0.7) lib/active_support/inflector/methods.rb:278:in `constantize'
activesupport (7.0.7) lib/active_support/core_ext/string/inflections.rb:74:in `constantize'
plugins/discourse-translator/plugin.rb:167:in `can_translate'
(eval):111:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
app/serializers/post_stream_serializer_mixin.rb:54:in `block in posts'
activerecord (7.0.7) lib/active_record/relation/delegation.rb:88:in `each'
activerecord (7.0.7) lib/active_record/relation/delegation.rb:88:in `each'
app/serializers/post_stream_serializer_mixin.rb:47:in `map'
app/serializers/post_stream_serializer_mixin.rb:47:in `posts'
plugins/discourse-reactions/lib/discourse_reactions/topic_view_serializer_extension.rb:15:in `posts'
app/serializers/post_stream_serializer_mixin.rb:18:in `post_stream'
(eval):3:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
activesupport (7.0.7) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (7.0.7) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (7.0.7) lib/active_support/core_ext/object/json.rb:42:in `to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `to_json'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapter.rb:25:in `dump'
multi_json (1.15.0) lib/multi_json.rb:139:in `dump'
app/controllers/topics_controller.rb:1335:in `block (2 levels) in perform_show_response'
actionpack (7.0.7) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'
app/controllers/topics_controller.rb:1329:in `perform_show_response'
app/controllers/topics_controller.rb:187:in `show'
actionpack (7.0.7) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.7) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/rendering.rb:165:in `process_action'
actionpack (7.0.7) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport (7.0.7) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
app/controllers/application_controller.rb:422:in `block in with_resolved_locale'
i18n (1.14.1) lib/i18n.rb:322:in `with_locale'
app/controllers/application_controller.rb:422:in `with_resolved_locale'
activesupport (7.0.7) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.7) lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack (7.0.7) lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/rescue.rb:23:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport (7.0.7) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.7) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.7) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.0.7) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack (7.0.7) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.0.7) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (7.0.7) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.7) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.3.0) lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method' 
actionpack (7.0.7) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.7) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.7) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.7) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.7) lib/action_dispatch/routing/route_set.rb:852:in `call'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
rack (2.2.8) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.8) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.8) lib/rack/head.rb:12:in `call'
actionpack (7.0.7) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/gtm_script_nonce_injector.rb:10:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
rack (2.2.8) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.8) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.7) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.7) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
logster (2.13.1) lib/logster/middleware/reporter.rb:40:in `call'
railties (7.0.7) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.7) lib/rails/rack/logger.rb:27:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
rack (2.2.8) lib/rack/method_override.rb:24:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.8) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.7) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
rack-mini-profiler (3.3.0) lib/mini_profiler.rb:191:in `call'
message_bus (4.3.8) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:233:in `call'
railties (7.0.7) lib/rails/engine.rb:530:in `call'
railties (7.0.7) lib/rails/railtie.rb:226:in `public_send'
railties (7.0.7) lib/rails/railtie.rb:226:in `method_missing'
rack (2.2.8) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.8) lib/rack/urlmap.rb:58:in `each'
rack (2.2.8) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'
Env
  1/3  
hostname	hv1-app
process_id	11359
application_version	0513865c3cbbf8449bcfdc0dff3d9c382d2c4207
HTTP_HOST	discourse.weather-watch.com
REQUEST_URI	/t/vp2-low-battery-warning/41154
REQUEST_METHOD	GET
HTTP_USER_AGENT	Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
HTTP_ACCEPT	text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
HTTP_REFERER	https://discourse.weather-watch.com/search?q=low%20batt
HTTP_X_FORWARDED_FOR	255.36.47.44, 10.20.0.1
HTTP_X_REAL_IP	10.20.0.1
username	luciano_giannobile
time	10:08 pm

FIX: Broken LibreTranslate support - Pull Request #128 - discourse/discourse-translator - GitHub 이 문제를 수정해야 합니다. @packman, 죄송합니다. PR의 린팅을 수정하려고 할 때 끔찍한 복사/붙여넣기 실수를 저질렀습니다 :man_facepalming:. 해당 커밋은 이제 병합되었으므로, 다시 빌드하면 정상적으로 작동할 것입니다.