可能听起来像一个简单的问题,但我很难过。
我创建了一个基本上包含生成器的gem。
它包含以下结构:
lib
- generators
- my_generator
my_generator_generator.rb (see below)
- templates
my_template_files...
- my_generator.rb (empty file)
test
-test files
GemFile
etc..
但是当我将这个Gem添加到我的gem文件并运行rails g时,它没有列出。我需要做任何额外的配置吗?
我的发电机大致看起来像这样......
class MyGeneratorGenerator < Rails::Generators::NamedBase
source_root File.expand_path('../templates', __FILE__)
generator code....
end
奇怪的是,它适用于Cygwin,但不适用于Ubuntu ......
答案 0 :(得分:37)
这让我想了一下,但我遇到了同样的问题。以下是我修复它的方法。
树结构如下所示:
lib
- generators
- gemname
install_generator.rb
- templates
(template files)
这是install_generator.rb的代码
#lib/generators/gemname/install_generator.rb
require 'rails/generators'
module Gemname
class InstallGenerator < Rails::Generators::Base
desc "Some description of my generator here"
# Commandline options can be defined here using Thor-like options:
class_option :my_opt, :type => :boolean, :default => false, :desc => "My Option"
# I can later access that option using:
# options[:my_opt]
def self.source_root
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
end
# Generator Code. Remember this is just suped-up Thor so methods are executed in order
end
end
我跑的时候 rails g
我明白了:
Gemname
gemname:install
您可能需要设置的其他一些事项:
#lib/gemname.rb
module Gemname
require 'gemname/engine' if defined?(Rails)
# any additional requires
end
和
#/lib/gemname/engine.rb
require 'rails'
module Gemname
class Engine < Rails::Engine
end
end
我在此发现的一些好的参考资料是:
答案 1 :(得分:4)
如果你使用Railtie,你可以在任何地方定义你的发电机:
generators do
require "path/to/my_railtie_generator"
end
在Railtie班。