Ответ 1
Мне потребовалось немного времени, чтобы понять, но я столкнулся с той же проблемой. Вот как я его исправил.
Структура дерева выглядит следующим образом:
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
Некоторые хорошие ссылки, которые я нашел на этом:
- 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/