Rails 插件生成器

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.

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?

Trying to use this in my new Deb Environment Windows Subsystem
My Discourse works and runs, but when I try to run

rails g plugin --help

I get

/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.

Running bundle install doesn’t do anything (new) and precompiler is in the list of gems.
Ideas?

Is your Discourse server running in a Docker container? If so you need to run bundle install inside the container.

No I don’t think so its a development instance to it was a direct git clone

这开箱即用,效果完美。

非常感谢。

刚刚运行了这个 Rails 生成器,为新插件创建了基础结构,上传到 Git,添加到 yml 文件中,重新构建应用后,它完美地开箱即用。

访问插件标签页,它赫然在列,并配备了开箱即用的启用/禁用设置。:heart:

非常感谢 @j.jaffeux 提供这个简单易用且实用的生成器。

我唯一做的修改是删除了内置的 .git 目录(使用 rm -rf),然后重新初始化 Git,以便将其推送到我的账户;但这很可能是因为我不太擅长 git,经常需要像用锤子敲 git 命令 一样折腾才能让它按我期望的方式工作。

完美的生成器。再次感谢 @j.jaffeux

4 个赞

很高兴它对你有效。老实说,我应该花些时间在上面,因为还有很多地方运行不正常。

6 个赞