neounix
(Dark Matter)
4월 29, 2020, 2:45오후
44
좋은 시작인 것 같아요. 이제 실제로 이걸로 멋진 일을 할 수 있는 방법을 배우는 일만 남았네요.
첫 번째 계획은 DB를 조회하는 코드를 작성해서 post_custom_fields 테이블에서 필요한 값을 가져온 후, 우리 흰머리 모더레이터 팀이 요청한 작은 요건을 위해 토픽 페이지에서 사용하는 것입니다.
내일 git에서 코드를 받아와서 다른 플러그인에서 샘플 DB 코드를 찾아보고 시작해서 얼마나 멀리 갈 수 있는지 해보려 합니다.
다시 한번 감사합니다 @j.jaffeux
조금이라도 도움이 되니, 저처럼 초보적인 discourse 플러그인 개발자에게 이런 생성기가 있다는 것은 정말 고맙습니다. 아래 하단에서 개발을 간절히 기다리고 있는 것을 볼 수 있어요:
수년간 vBulletin용 플러그인을 무수히 많이 작성해왔기 때문에, discourse용 간단한 플러그인 몇 개를 만들어 볼 생각에 정말 설레네요, 믿어주세요.
2개의 좋아요
neounix
(Dark Matter)
8월 11, 2020, 6:35오전
45
안녕하세요 @j.jaffeux
여전히 Discourse 플러그인에 대해 배우고 있는 중인데, 오늘 이 플러그인 생성기로 돌아가서 macOS 개발 환경에서 다음을 시도해 보았습니다. 앱은 정상적으로 실행 중이며, 학습을 위해 Ruby와 Rails 공부 및 소규모 플러그인 작업을 많이 해 왔습니다:
# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'
모두 잘 진행되는 것처럼 보이며, 플러그인도 정상적으로 설치됩니다:
하지만 해당 경로로 이동하면:
http://localhost:3000/discourse_racoon
작동하지 않습니다:
이 경우 DiscourseRacoon처럼 기본 플러그인을 생성한 후 플러그인 라우트와 컨트롤러가 OOTB(Out Of The Box, 설치 즉시 사용 가능)로 작동해야 한다는 제 이해가 잘못된 것인가요?
여러 온라인 참고 자료를 찾아보았는데, 라우트가 존재하는지 확인해야 한다고 안내되어 있어 routes.rb 파일을 확인해 보니 라우트가 정의되어 있었습니다. 또한 discourse_racoon_controller.rb 파일도 확인해 보니 컨트롤러에 index 메서드(액션)가 존재합니다.
죄송합니다. 더 흥미로운 플러그인 개발과 Discourse 관련해서 아직 많이 헤매고 있습니다. 제가 무엇을 잘못하고 있는 걸까요? 이 문제를 디버깅하기 위한 다음 단계에 대한 조언이 있을까요?
감사합니다.
1개의 좋아요
j.jaffeux
(Joffrey Jaffeux)
8월 11, 2020, 6:39오전
46
/discourse-racoon이지 /discourse_racoon이 아닙니다
rake routes | grep racoon
discourse_racoon /discourse-racoon DiscourseRacoon::Engine
GET / discourse_racoon/discourse_racoon#index
actions GET /actions(.:format) discourse_racoon/actions#index
GET /actions/:id(.:format) discourse_racoon/actions#show
5개의 좋아요
neounix
(Dark Matter)
8월 11, 2020, 6:45오전
47
안녕하세요 @j.jaffeux
감사합니다!
그것이 문제였네요.
이것은 제가 배워야 할 Rails 관례인가요? 밑줄로 정의된 모든 라우시가 대시(-)로 접근되는 것인가요?
DiscourseRacoon::Engine.routes.draw do
get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
get "/actions" => "actions#index", constraints: DiscourseRacoonConstraint.new
get "/actions/:id" => "actions#show", constraints: DiscourseRacoonConstraint.new
end
1개의 좋아요
neounix
(Dark Matter)
8월 12, 2020, 4:27오전
48
안녕하세요,
이 생성기로 hello world 플러그인을 생성한 후, Ruby의 “파일 쓰기” 문구를 여러 개 추가하고 Rails 라이프사이클을 관찰했습니다. 그 결과 Rails 컨트롤러가 예상대로 작동하지 않는 것을 발견했습니다(로그가 기록되지 않아 무시되고 있음을 의미합니다).
디버깅을 통해 Rails 컨트롤러를 상위 디렉터리로 이동시키자 예상대로 작동하기 시작했습니다.
또한, 메인 인덱스 페이지용 JavaScript/Ember 컨트롤러와 템플릿을 추가하고, 모든 템플릿에 HTML과 CSS를 추가했으며, 쿠키를 읽고 템플릿을 강조 표시하는 JS 코드도 추가했습니다.
예를 들어, rails 플러그인 생성기로 생성된 플러그인에 몇 가지 변경 사항을 가한 후:
http://localhost:3000/hello-world/
전체적인 세부 사항과 스크린샷은 아래 링크에서 확인하실 수 있습니다:
Discourse
Discourse Plugins
Discourse has a rails plugin generator which generates a basic Discourse plugin scaffolding. So, I created a "hello world" plugin with this generator using rails g plugin hello-world and added a bunch of Ruby statements to each .rb file to...
Reading time: 2 mins 🕑
Likes: 2 ❤
마지막으로, 이 rails 플러그인 생성기를 만들어 주신 @j.jaffeux님께 감사의 말씀을 전합니다. Rails 컨트롤러를 디버깅하는 것이 정말 재미있었고, Rails 라이프사이클과 JS 템플릿/컨트롤러를 모두 점검할 수 있도록 수정하는 과정도 즐겼습니다.
제 변경 사항이 저처럼 여가 시간을 활용해 Discourse 플러그인 개발의 기초를 배우고 있으며 rails 플러그인 생성기를 사용하고자 하는 다른 분들께 도움이 되기를 바랍니다.
참고:
A plugin for debugging the Discourse rails plugin generator
현재 저는 Rails 및 Discourse 플러그인 개발 학습 과정의 일환으로 깨진 플러그인을 디버깅하고 수정하는 것이 정말 재미있습니다
5개의 좋아요
pfaffman
(Jay Pfaffman)
8월 12, 2020, 7:45오후
49
@neounix , 이 문제를 해결해 주셔서 감사합니다! 제 프로젝트를 앞으로 나아가게 하는 데 필요한 돌파구가 될 것 같습니다.
@j.jaffeux , 해당 파일들을 이동시키는 것이 권장 해결책인가요, 아니면 다음과 같은 방식으로 포함시켜야 하나요?
load File.expand_path('some-path-here', __dir__)
제가 포함(include)을 시도해 보았다고 생각 하는데, 그때 뭔가 누락되었다는 오류가 발생했었습니다(그래서 제가 잘못된 일을 한 것 같고, 정확한 내용을 문서화할 필요까지는 없다고 생각합니다).
수정: /plugin-path를 호출하면 컨트롤러가 실제로 로드/실행되는 것 같습니다.
3개의 좋아요
neounix
(Dark Matter)
8월 13, 2020, 12:25오전
50
Hey @pfaffman
처음에는 plugin.rb에서 load 문을 사용해 Ruby 컨트롤러를 로드하려고 했지만, 예상대로 로그가 출력되지 않았습니다.
Ruby 컨트롤러를 테스트할 때는 파일 시스템에 로그를 남기는 Ruby 문을 사용했고, 해당 로그 파일에 대해 tail -f를 실행하여 컨트롤러가 어떻게 트리거되는지 확인했습니다.
재미로, 어제 하루를 마무리하며 Rails 컨트롤러로 모든 프로세스의 ENV 변수를 쿠키로 읽어들이고, Ember 컨트롤러로 이를 앱에 기록하는 코드를 작성했습니다.
정말 재미있었어요!
중독됐네요 ㅋㅋ
3개의 좋아요
riking
(Kane York)
9월 10, 2020, 12:58오전
51
neounix:
언더스코어로 정의된 모든 라우트가 대시로 접근되는 것이 Rails의 관례인 것 같습니다? 배워야 하는 것인가요?
DiscourseRacoon::Engine.routes.draw do
get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
URL 부분은 =>의 왼쪽에 있고, Ruby 코드 참조는 오른쪽에 있습니다. _와 -의 차이는 엔진의 mount 라인에서 정의됩니다.
4개의 좋아요
@eviltrout의 플러그인 가이드 4부 에서 그는 플러그인을 Discourse 코드베이스 외부에서 개발하고 plugins 디렉터리에 심볼릭 링크를 설정하는 것을 권장합니다.
eviltrout:
이 설정의 장점은 플러그인을 GitHub에 커밋할 때 플러그인이 들어 있는 Discourse 코드베이스를 걱정할 필요가 없다는 점입니다. 변경 사항은 플러그인 자체로만 격리됩니다. Discourse 코드를 수정해야 하는 경우에도 여전히 수정할 수 있지만, git는 변경 사항을 별도로 추적합니다!
플러그인 코드베이스에는 편집기 창 하나를, Discourse 자체에는 다른 창 하나를 사용하는 것을 권장합니다. 둘을 서로 다른 것으로 생각하면 작업하기가 더 쉽습니다.
플러그인을 다른 디렉터리에 생성하기 위해 -d ~/path/to/plugin_src 옵션을 추가하고, 가능하면 심볼릭 링크도 설정하는 것이 합리적일까요?
1개의 좋아요
j.jaffeux
(Joffrey Jaffeux)
8월 20, 2021, 8:38오전
53
죄송하지만 이 기능을 비추천(deprecated) 처리하고 해당 주제를 당분간 닫을 수 있습니다.
커스터마이징 측면에서는 덜 강력하지만, 현재 플러그인을 시작하는 데 선호하는 방법은 GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub 템플릿을 사용하는 것입니다 (초록색 ‘USE THIS TEMPLATE’ 버튼 참고).
이렇게 하면 최신 상태로 유지하는 것이 훨씬 수월합니다.
6개의 좋아요