Rails 3发电机的宝石 [英] Rails 3 generators in gem

查看:143
本文介绍了Rails 3发电机的宝石的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我创建了一个基本上包含一个生成器的gem。



它包含以下结构:

  lib 
- 生成器
- my_generator
my_generator_generator.rb(见下文)
- 模板
my_template_files ...
- my_generator.rb(空文件)
测试
- 测试文件
GemFile
等。

然而,当我将这颗宝石加入我的宝石文件和运行轨道g,它没有列出。是否有任何额外的配置,我需要做?



我的生成器大致看起来像这样...

  class MyGeneratorGenerator< Rails :: Generators :: NamedBase 
source_root File.expand_path('../ templates',__FILE__)
生成器代码....
结束



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

解决方案

我花了一点点才弄明白,但我遇到了同样的问题。这是我如何修复它。



树形结构如下所示:

  lib 
- 生成器
- gemname
install_generator.rb
- 模板
(模板文件)

以下是install_generator.rb的代码

 #lib / generators /gemname/install_generator.rb 
需要'rails / generators'
模块Gemname
class InstallGenerator< Rails :: Generators :: Base
desc我的生成器的一些描述在这里

#命令行选项可以在这里使用Thor-like选项来定义:
class_option:my_opt,: type => :boolean,:default => false,:desc => 我的选项

#我可以稍后访问该选项:
#options [:my_opt]


def self.source_root
@source_root || = File.join(File.dirname(__ FILE__),'templates')
结束

#发生器代码。请记住,这只是加法Thor,所以方法执行顺序为


end
end

当我运行
rails g



我看到:

  Gemname 
gemname:install

有些您可能需要设置的其他内容:

 #lib / gemname.rb 
module Gemname
require' gemname / engine'if defined?(Rails)
#any additional require
end

 #/ lib / gemname / engine.rb 
需要'rails'
模块Gemname
class Engine< Rails :: Engine
end
end

我找到了一些很好的参考这是:


Might sound like a simple question, but I'm stumped.

I've created a gem that essentially contains a generator.

It contains the following structure:

lib
 - generators
    - my_generator
          my_generator_generator.rb (see below)
          - templates
             my_template_files...     
 - my_generator.rb (empty file)
test
 -test files
GemFile
etc..

However when I add this Gem to my gem file and run rails g, it's not listed. Is there any additional config that I need to do?

My generator roughly looks like this...

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

The strange thing is, it works in Cygwin, but not in Ubuntu...

解决方案

This took a little bit for me to figure out, but I've run into the same problem. Here is how I fixed it.

Tree structure looks like this:

lib
  - generators
    - gemname
      install_generator.rb
      - templates
        (template files)

Here's the code for 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

When I run rails g

I see:

Gemname
   gemname:install

Some other things you may need to setup:

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

and

#/lib/gemname/engine.rb
require 'rails'
module Gemname
  class Engine < Rails::Engine
  end
end

Some good references I've found on this are:

这篇关于Rails 3发电机的宝石的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆