커스텀 컨트롤러 설정 튜토리얼과 라우트를 따라 진행했을 때 라우팅 오류(Routing Error) 페이지가 표시됩니다. 해당 페이지에는 경로와 컨트롤러가 나열되어 있는데, 이 부분 자체는 모두 정확합니다. 하지만 리소스를 요청하면 오류가 발생합니다. 이 튜토리얼이 오래된 것임을 알고 있지만, 정보의 정확성은 유지되는지 궁금합니다. 플러그인 스켈레톤을 첨부했으니, 문제를 해결하는 데 도움을 주실 수 있는 분이 계신지 모르겠습니다. 감사합니다!
플러그인을 통해 Discourse에 커스텀 Rails 라우트를 추가하는 최소 개념 증명을 제공합니다. 필요한 주요 파일인 plugin.rb, 컨트롤러, 라우트 등록 코드를 포함합니다.
주요 포인트
플러그인 내에서 컨트롤러와 라우트를 격리하기 위해 Rails "엔진(engine)"을 사용하는 것이 가장 좋은 관행입니다.
plugin.rb에서 컨트롤러를 명시적으로 require해야 합니다.
새 라우트를 등록하려면 엔진의 routes.draw 메서드를 사용하고 메인 애플리케이션 라우트에 엔진을 마운트(mount)해야 합니다.
최소 예시
plugin.rb
# name: my-custom-route
# about: Adds a custom route via Rails engine in a plugin
# version: 0.1
# authors: Your Name
after_initialize do
module ::MyPlugin
class Engine < ::Rails::Engine
engine_name "my_plugin"
isolate_namespace MyPlugin
end
end
require_dependency File.expand_path('../app/controllers/my_plugin/my_controller.rb', __FILE__)
MyPlugin::Engine.routes.draw do
get "/hello" => "my#hello"
end
Discourse::Application.routes.append do
mount ::MyPlugin::Engine, at: "/my_plugin"
end
end
app/controllers/my_plugin/my_controller.rb
module MyPlugin
class MyController < ::ApplicationController
def hello
render plain: "Hello from my plugin!"
end
end
end
동작 방식:
GET /my_plugin/hello 요청 시 "Hello from my plugin!"라는 일반 텍스트 응답을 반환합니다.