플러그인의 `lib` 폴더가 `$LOAD_PATH`에 추가되는 방법

플러그인을 생성할 때 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에 디렉토리를 추가하는지 이해하지 못하겠습니다.

많은 plugin.rb 파일은 Rails Engine을 초기화하며, 이는 로드 경로에 다양한 항목을 추가합니다.

Rails 엔진이 없는 경우, 이를 보완하기 위해 plugin.rb 파일 상단에 수많은 require_relative 호출을 볼 수 있습니다.

instance_eval이 plugin.rb 파일을 실행하기 때문이라고 생각합니다. plugin.rb가 실행되지 않으면 Rails 엔진이 생성되지 않고, 추가 경로가 load_path에 추가되지 않습니다.

감사합니다! 덕분에 이해할 수 있었습니다.

저도 동일한 플러그인 시스템을 구현하려고 했는데, 문제는 플러그인을 나중에 application.rb 외부, 예를 들어 초기화 파일(initializer)에서 활성화하고 있었다는 점입니다. 그렇게 하면 플러그인의 lib(그리고 아마도 다른 폴더들)가 로드 경로(load path)에 추가되지 않습니다.