Rails plugin generator

Newbie note: you must run the generator in the Discourse source directory (that’s /src if you use Docker). Otherwise you’ll just get confusing error/help messages about how the parameters are incorrect for rails new.

5개의 좋아요

There seems to be a mismatch between the plugin generator and this post. Specifically, the Beginner’s Guide suggests to create the javascript initializer with the following directory and naming structure:

plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js.es6

However, the plugin creates the javascript initializer at

plugins/discourse-racoon/assets/javascripts/initializers/discourse-racoon.es6

Personally, I was having issues with the javascript loading after using this plugin until I changed the directory and naming structure to match the Beginner’s guide. Should the package be updated?

4개의 좋아요

Yes would be better indeed.

3개의 좋아요

Yes I had to rename the JavaScript extensions but the structure worked for me.

this thing breaks for me.

Cant help you, you give me no context. What did you type? where did you type it? clean or exisisting state?

6개의 좋아요

I followed this tutorial https://meta.discourse.org/t/beginners-guide-to-creating-discourse-plugins-part-1/30515. Just installed and worked so guess its clean.
I typed:

bundle exec rails g plugin cidian

EDIT: Capitalization matters in ruby. The name of the plugin created by this generator gets to be a ruby class so that’s why a lower case argument supplied to this generator will lead to a broken plugin.

No it’s not clean as you have followed this tutorial to create a plugin, and the error is likely in what you typed while following the tutorial.

The error is very clear to me: mount ::cidian::Engine, at: "/cidian" is invalid. You should fix this in your code.

2개의 좋아요

First of all: I dont know ruby (yet) as I will start from the front end.
this code was produced by this plugin generator. so its not my fault. Its the generators fault. I typed nothing while following the tutorial. I just followed the development environment setup guide for ubuntu. Before running the generator the local discourse instance worked fine.
https://github.com/discourse/discourse/blob/master/lib/generators/plugin/templates/plugin.rb.erb
to be very clear: I am just at the first page of this tutorial. specifically the part that links to this plugin generator.

I just made a massive update to this.

https://github.com/discourse/discourse/commit/d83f99fc2ec97fcab3a0d50f751ae96ff32eae96

More to come: specific generators AKA add one controller for example, and admin plugins.

12개의 좋아요

Wow! Looks great from the diff (to someone who knows very little about writing plugins). Can’t wait to try it out (but I likely will wait until I get to the office on Monday :wink:)

2개의 좋아요

Hey, @j.jaffeux, I just tried it (and did a git pull again and created some more plugins with it after it failed the first time) and I’m getting

/home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:314:in `block (2 levels) in check_controller_and_action': 'one_two/one-two' is not a supported controller name. This can lead to potential routing problems. See http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use (ArgumentError)

I’m sad because I have a plugin that started with this that I added a bunch of code to before running it. Can you tell me how to fix it? The stuff at that guide and what I found at StackOverflow don’t help me.

Thanks.

oh yes I stumbled on this this other and have yet to fix.

It should be controllers/one_two/one_two_controller.rb I think, not sure given you don’t give all the data

4개의 좋아요

It looks like I found it! The culprit is in config/routes.rb. I changed

 get "/" => "three-four#index", constraints: ThreeFourConstraint.new

to

get “/” => “three_four#index”, constraints: ThreeFourConstraint.new

and all is well, at least to my naive eye.

How should I go about this?

새로 만든 Deb 환경인 Windows Subsystem에서 이걸 사용하려고 합니다.
Discourse는 정상적으로 작동하지만, 다음을 실행하려고 하면

rails g plugin --help

아래와 같은 오류가 발생합니다.

/var/lib/gems/2.5.0/gems/railties-6.0.0/lib/rails/app_loader.rb:53: warning: Insecure world writable dir /home/jose/.rbenv/shims in PATH, mode 040777
Could not find actionview_precompiler-0.2.1 in any of the sources
Run `bundle install` to install missing gems.

bundle install을 실행해도 아무런 반응이 없고(새로 설치되는 것도 없음), precompiler는 이미 gem 목록에 있습니다.
해결 방법이 있을까요?

Discourse 서버를 Docker 컨테이너에서 실행하고 계신가요? 그렇다면 컨테이너 안에서 bundle install을 실행해야 합니다.

아니요, 그렇게 생각하지 않습니다. 개발 인스턴스이고 직접 git clone한 것이기 때문입니다.

이것이 OOTB(Out Of The Box) 상태에서 완벽하게 작동했습니다.

감사합니다.

이 레일즈 생성기를 실행하여 새 플러그인의 기본 구조를 만들고, git에 업로드한 뒤 yml 파일에 추가하고 앱을 다시 빌드했는데, OOTB 상태에서 완벽하게 설치되었습니다.

플러그인 탭을 방문했는데, OOTB 활성화/비활성화 설정이 포함된 채로 그대로 있었습니다. :heart:

이렇게 사용하기 쉽고 유용한 생성기를 만들어 주셔서 @j.jaffeux 님께 진심으로 감사드립니다.

제가 한 유일한 변경 사항은 포함된 .git 디렉터리에 rm -rf를 실행하고 git을 재초기화하여 제 계정에 push할 수 있도록 한 것입니다. 하지만 그것은 아마도 제가 git에 대해 매우 숙련되지 않아서, 제가 원하는 대로 작동하도록 git 관련 작업을 해머로 때려야 하는 경우가 많기 때문일 것입니다..

완벽한 생성기입니다. 다시 한번 감사합니다 @j.jaffeux

4개의 좋아요

그게 해결되었다니 다행입니다. 솔직히 말하면, 제대로 작동하지 않는 부분이 많아서 제가 시간을 투자해서 해결해야 할 것 같습니다.

6개의 좋아요