커스텀 로케일 작업을 위해 브라우저 측 I18n 객체에 커스텀 속성을 로드하는 맞춤형 JS 메서드를 만들었습니다.
종속된 각 클라이언트에서 이 JsLocaleHelper 메서드가 다시 평가되도록 트리거를 발생시키고 싶습니다.
서버 측에서 이를 트리거하는 방법을 찾고 있습니다.
이전에는 작동했지만 최근 변경된 것 같습니다.
브라우저에서 로컬 클라이언트 캐시를 삭제하면 데이터가 올바르게 표시되지만, 당연히 이는 프로덕션 환경에서 지속 가능한 해결책이 아닙니다. 다만 이를 통해 문제가 로컬 캐싱에 있음을 확인할 수 있습니다.
다음과 같은 방법들을 시도해 보았습니다:
Discourse.request_refresh!
또는 더 구체적으로:
Discourse.request_refresh!(user_ids: user_ids)
이것은 내비게이션 시 새로고침을 강제하는 것으로 보입니다. 그러나 스크립트가 캐싱되고 있을 가능성이 있어 이는 해결책이 되지 못합니다.
도움 주시면 감사하겠습니다!
RGJ
(Richard - Communiteq)
7월 21, 2022, 2:56오후
2
user_ids 매개변수가 있을 때와 없을 때 이 함수의 동작이 매우 다르다는 점에 유의하세요.
MessageBus.publish "/file-change", ["refresh"]를 시도해 보셨나요?
훌륭한 아이디어네요, 작동합니다! 감사합니다.
하지만 확장성이 있을까요?
그렇게 하면 많이 도움이 되지만, 계속 더 파볼 예정입니다.
시간이 지나면서 퍼지는 그 방식의 변형이라도 찾으면, 무리 없이 진행할 수 있을 것 같습니다.
다만, 정확한 파일을 지정할 수 있다면 더 좋겠습니다.
자, 이제 난감한 상황에 처해 있습니다.
제가 파악한 내용은 다음과 같습니다:
extra-locales 번들은 스크립트 태그로 추가됩니다.
이 번들은 번들 이름에 따라 달라지는 버전 매개변수를 포함합니다.
버전 번호는 부팅 시에만 평가된다고 생각하므로, 다음 상황이 발생하기 전까지는 캐시에 유지됩니다:
클라이언트가 완전히 새로고침하도록 강제하는 경우 (이것은 apparently 일괄적으로만 가능한 것 같습니다?)
서버를 재시작하는 경우
또는 클라이언트가 브라우저 캐시를 지우는 경우
더 세밀한 제어 기능이 없다는 점은 최소한 불행한 일입니다.
내비게이션 메시지 시 "전체 새로고침"을 도입할 수 있을까요?
RGJ
(Richard - Communiteq)
7월 22, 2022, 8:52오전
7
방금 Discourse.request_refresh!를 테스트해 보았는데, 다음 내비게이션 시 모든 JavaScript 자산이 다시 로드되는 것 같습니다. JsLocaleHelper의 새로 고침이 트리거되는지는 확실하지 않습니다. 그 작동 방식에 대해 충분히 파악하고 있지 못하기 때문입니다.
미묘한 부분이 있습니다.
"200"은 실제로는 "200 (cached)"이며, 이는 브라우저 측에서 발생하는 것입니다.
이 주제에 대한 좋은 Stack Overflow 게시물.
gerhard
(Gerhard Schlager)
7월 22, 2022, 11:39오전
10
extra-locales를 수정한 후 ExtraLocalesController.clear_cache!를 호출해 보셨나요? 다음 요청 시 버전을 다시 계산해야 합니다.
감사합니다. 네, 확인했습니다. 서버 측 문제일 뿐이고, 부트스트랩 과정에서 설정된 JS 파일의 버전 번호는 변경되지 않는다고 생각합니다. 서버 측에는 문제가 없습니다.
이 데이터를 사이트 객체와 직렬화기로 이동시켜 더 많은 제어가 가능한지 검토하고 있습니다.
gerhard
(Gerhard Schlager)
7월 22, 2022, 12:35오후
12
음, 내가 무슨 의도인지 잘 모르겠네요.
클라이언트가 다음 리로드 시 서버에 추가한 데이터를 단순히 가져오길 원한다고 가정했습니다. 만약 모든 것을 클라이언트에서 처리하고 싶다면, 왜 클라이언트에서 I18n.extras를 직접 업데이트하지 않나요?
네, 정확히 그렇습니다.
만약 이 명령어를 rails 콘솔에서 실행하면, 클라이언트의 스크립트는 어떻게 무효화되나요?
(참고로 태그는 슬러그에 사용되므로 특수한 경우입니다. 따라서 모든 곳에서 태그 번역을 직렬화할 수 없고, 번역을 포함하기 위해 특수한 객체를 추가해야 합니다. 그렇지 않으면 라우팅이 작동하지 않기 때문입니다.)
gerhard
(Gerhard Schlager)
7월 22, 2022, 12:46오후
14
다음에 클라이언트가 페이지를 새로 고치면 HTML에서 다른 해시를 보고 새로운 스크립트를 로드합니다. “텍스트 사용자 지정” 기능(이 기능은 “overrides” 번들을 사용)이 바로 이렇게 작동합니다.
<link rel="preload" href="/extra-locales/overrides?v=ecb7809c205de318b2c16d1b51d4b6f6" as="script">
재현할 수 있습니다.
따라서 이번에는 오버라이드를 사용하지 않습니다. 왜냐하면 이는 바닐라 클라이언트 측 JS 로컬라이제이션에 관한 것이 아니기 때문입니다.
어떤 이유인지 모르겠지만, 현재 우리가 사용하고 있는 사용자 정의 JsLocaleHelper 파일은 해당 버전 번호 업데이트 시스템에 연결되지 않습니다.
하지만 이는 매우 유용한 정보입니다. Gerhard님, 감사합니다. 이제 서버가 어떻게 그 버전 번호를 업데이트하는지 연구해 볼 수 있을 것 같습니다.
또한 오버라이드 파일은 선택 사항이라는 점도 흥미롭습니다!
@gerhard 정말 큰 도움이 되었습니다, 감사합니다.
문제가 해결되었습니다. 커스텀 js 파일의 내용 기반으로 버전 번호를 설정해야 했습니다. 이제 dev 환경에서 정상적으로 작동합니다