【问题标题】:Rails 3 generators in gem宝石中的Rails 3生成器
【发布时间】:2011-07-31 11:12:24
【问题描述】:

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

我创建了一个本质上包含生成器的 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 中无效...

【问题讨论】:

  • 和ruby/rails版本一样吗?
  • 是的。 ruby 1.8,Rails 3.0

标签: ruby-on-rails ruby-on-rails-3 rubygems generator


【解决方案1】:

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

generators do
    require "path/to/my_railtie_generator"
end

在 Railtie 类中。

【讨论】:

    【解决方案2】:

    我花了一点时间才弄清楚,但我遇到了同样的问题。这是我修复它的方法。

    树形结构如下:

    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
    

    当我跑步时 导轨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
    

    我在这方面找到了一些很好的参考资料:

    【讨论】:

    • 谢谢。太棒了。认为我必须缺少某种安装文件。给你源代码的荣誉。链接也很有用,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多