아마도 이전 게시물들에서 여러분을 오해하게 만들었나 봅니다. reloadable_patch는 Discourse 개발에 유용하지만, @david가 그 용도를 아주 잘 설명해 주셨습니다:
plugin.rb의 after_initialize 블록 안에 있는 코드는 애플리케이션 시작 시에만 로드되고, 이후의 리로드 시에는 로드되지 않습니다.
따라서 유저 시리얼라이저에 무언가를 추가하고 싶다고 가정해 보겠습니다. 일반적인 동작은 다음과 같습니다:
시작 시:
- Discourse가
user_serializer.rb를 로드합니다. user_serializer에 오버라이드가 포함된plugin.rb를 Discourse가 로드합니다.
리로드 시:
- Discourse가
user_serializer.rb를 다시 로드합니다. - (plugin.rb 패치는 다시 로드되지 않아 플러그인 오버라이드가 사라집니다)
우리의 reloadable_patch 시스템을 사용하면:
시작 시:
- Discourse가
user_serializer.rb를 로드합니다. - Discourse가
plugin.rb를 로드하고 user_serializer에 대한reloadable_patch를 등록합니다. - 리로드 가능한 패치들이 실행됩니다.
리로드 시:
- Discourse가
user_serializer.rb를 다시 로드합니다. - 리로드 가능한 패치들이 실행됩니다.
- (좋아요, 플러그인 오버라이드가 여전히 작동합니다)