宝石中的Rails 3发电机

Yul*_*ule 15 rubygems ruby-on-rails generator ruby-on-rails-3

可能听起来像一个简单的问题,但我很难过.

我创建了一个基本上包含生成器的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..
Run Code Online (Sandbox Code Playgroud)

但是当我将这个Gem添加到我的gem文件并运行rails g时,它没有列出.我需要做任何其他配置吗?

我的发电机大致看起来像这样......

class MyGeneratorGenerator < Rails::Generators::NamedBase
      source_root File.expand_path('../templates', __FILE__)
      generator code....
 end
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它适用于Cygwin,但不适用于Ubuntu ......

Mik*_*mer 37

这让我有点想弄清楚,但我遇到了同样的问题.这是我修复它的方法.

树结构看起来像这样:

lib
  - generators
    - gemname
      install_generator.rb
      - templates
        (template files)
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

当我运行rails g

我知道了:

Gemname
   gemname:install
Run Code Online (Sandbox Code Playgroud)

您可能需要设置的其他一些事项:

#lib/gemname.rb
module Gemname
  require 'gemname/engine' if defined?(Rails)
  # any additional requires
end
Run Code Online (Sandbox Code Playgroud)

#/lib/gemname/engine.rb
require 'rails'
module Gemname
  class Engine < Rails::Engine
  end
end
Run Code Online (Sandbox Code Playgroud)

我在此发现的一些很好的参考资料是:


fre*_*eze 5

如果您使用 Railtie,您可以在任何可以使用的地方定义生成器:

generators do
    require "path/to/my_railtie_generator"
end
Run Code Online (Sandbox Code Playgroud)

在 Railtie 类中。