环境
- Rails: 6.1.4.1
- Ruby: 3.0.1
- Manjaro 21.1.5
引文
因为使用 rails plugin new gem_name
创建的 gem 是不带有 rails 命令的,没办法直接生成 generator,所以这里用手动创建文件的方式来编写 generator。关于 generator 的相关知识,移步官方文档 -> 创建及定制 Rails 生成器和模板
步骤
- 创建 gem 。这里我们创建一个名为 demo1 的 gem 来用于讲解
$ rails plugin new demo1
$ cd demo1
会看到命令生成的文件如下
- 将 demo1.gemspec 中的标为 TODO 的项改为实际值,不修改掉 TODO 项是没办法运行 gem 里边的 dummy 应用的
-
创建
lib/generators/demo1
文件夹,注意该路径中的demo1
为 gem 的名字,后续要创建的 generator 目录就放在这个下面
$ mkdir -p lib/generators/demo1
- 这里假设我们要创建一个名为 install 的 generator ,参照 rails 默认生成的 generator 目录结构,创建如下文件。
$ cd lib/generators/demo1
$ mkdir -p install/templates
$ touch install_generator.rb
$ touch USAGE
此时使用 tree 查看到目前的目录结构如下
- 将如下内容添加至
install/install_generator.rb
中
module Demo1
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path('templates', __dir__)
def install
p "install..."
p "installed"
end
end
end
- 将如下内容添加至
install/USAGE
中。这一步是为了查看生成器列表时可以看到相对应的命令和描述,目前只是练习,可以跳过。
Description:
Explain the generator
Example:
bin/rails generate demo1:install
This will create:
what/will/it/create
- 回到 gem 根目录,进入
test/dummy
目录中。如果你按照上面的步骤下来,应该是在lib/generator/demo1
目录中。
$ cd ../../../
$ cd test/dummy
然后就可以通过 dummy 里边的 rails 测试生成器命令了
$ bin/rails g demo1:install