플러그인을 생성할 때 lib 폴더를 추가하고 그 안에 파일을 넣으면, 해당 경로가 $LOAD_PATH에 추가되기 때문에 require를 사용할 수 있다는 것을 확인했습니다.
예를 들어, docker_manager 플러그인에는 lib/docker_manager/git_repo.rb 파일이 있습니다. 그러면 rails 콘솔(rails c)을 실행한 후 require 'docker_manager/git_repo’를 입력할 수 있습니다.
discourse가 이러한 모든 경로를 어떻게 사용 가능하게 만드는지 궁금합니다.
/lib/plugin/instance.rb 파일에서 671번째 줄인 self.instance_eval File.read(path), path를 주석 처리하면 require가 작동하지 않는다는 것을 확인했습니다. 하지만 instance_eval이 어떻게 load_path에 디렉토리를 추가하는지 이해하지 못하겠습니다.
저도 동일한 플러그인 시스템을 구현하려고 했는데, 문제는 플러그인을 나중에 application.rb 외부, 예를 들어 초기화 파일(initializer)에서 활성화하고 있었다는 점입니다. 그렇게 하면 플러그인의 lib(그리고 아마도 다른 폴더들)가 로드 경로(load path)에 추가되지 않습니다.