ruby-on-rails - gem 中的Rails 3生成器

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

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

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

最佳答案

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

树形结构如下所示:

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

我在这方面找到的一些很好的引用资料是:
  • http://textmate.rubyforge.org/thor/Thor.html (查看模块,尤其是 Thor::Actions)
  • http://api.rubyonrails.org/classes/Rails/Generators/Base.html
  • http://api.rubyonrails.org/classes/Rails/Generators/Actions.html
  • https://github.com/wycats/thor/blob/master/README.md
  • http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/
  • 关于ruby-on-rails - gem 中的Rails 3生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5577713/

    相关文章:

    ruby-on-rails - Rails 3 : Heroku app using myapp. herokuapp.com 作为 URL 构建的基础

    ruby-on-rails - 如何使用范围连接多个表

    ruby - 如何从 shapefile .prj 中读取 WKT?

    rubygems - rubygems.org 中缺少 rb-inotify-0.9.6.gem

    mysql - Rails 和 MySQL -- 设置 root 密码的困境

    ruby - 如何在 Ruby 中使用 OpenID 访问 Google 通讯录

    ruby-on-rails - Rails,如何进行不使用 ID 的自定义事件记录连接

    ruby-on-rails - Ruby 类( super )

    ruby-on-rails - Rails 3 —在隐藏表单字段中传递user.id与使用关联

    ruby-on-rails - rails 上的 ruby 。 Unicode 路由