7

私は Ruby gems を構築するのにかなり慣れていないので、最初の 1 つに挑戦しています。Rails アプリで移行を生成する gem のジェネレーターを作成中です。Railsアプリケーションにgemを含め、「rails g mygem:install」を実行して移行を作成し、「rake db:migrate」を実行してすべてを完成させるだけです。

同様のタスクを達成するためのいくつかの異なる方法を見つけましたが、これまでのところ何も機能していません。Railsアプリケーションでジェネレーターを見つけることができないようです。私が試した最新のガイドはhttp://www.railsdispatch.com/posts/how-rails-3-enables-more-choices-part-1にあります。

私の現在の宝石構造は次のようになります。

-lib/
  -generators/
    -templates/
      -some_migration.rb
    -install_generator.rb
  -gemname/
    -rails/
      -railtie.rb
      -engine.rb
      -tasks/
        -gemname.rake
  -gemname.rb
 -spec/
 -gemname.gemspec

私の install_generator.rb ファイルは次のようになります。

require 'rails'

module Gemname
  class InstallGenerator < ::Rails::Generators::Base
    include Rails::Generators::Migration
    source_root File.expand_path('../templates', __FILE__)

    desc "add the migrations"
    def self.next_migration_number(path)
      unless @prev_migration_nr
        @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
      else
        @prev_migration_nr += 1
      end
     @prev_migration_nr.to_s
    end

    def copy_migrations
     migration_template "some_migration.rb", "db/migrate/some_migration.rb"
    end
  end
end

見逃しているものがあるかどうかはわかりません。Gemfile に自分の gem がリストされていて、gem がインストールされている Rails 3.2 アプリケーションでテストしています。ジェネレーターが表示されない原因となっている可能性のある gem フォルダー構造に何か問題がありますか? どこかで何かを要求する必要がありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

Rails は、以前のように lib のすべてをデフォルトで自動的にロードしなくなりました。ファイルを要求するいくつかの方法については、この質問に対する回答を確認してください - Rails 3 で lib フォルダーからモジュール/クラスをロードする最良の方法は? .

于 2012-11-29T08:38:43.790 に答える
1

さて、私が行った変更のどれが私の問題を解決したかはわかりませんが、ここで私がしたことは次のとおりです。

ジェネレーターの名前を gemname_generator.rb に変更し、ジェネレーターのディレクトリ構造を次のように変更しました。

- lib/
  -generators/
    -templates/
    -gemname_generator.rb

この行をジェネレーターに追加しました:

namespace 'gemname'

Rails アプリケーションで「rails g gemname」を実行し、ジェネレーターを呼び出せるようになりました。

于 2012-11-29T14:40:47.900 に答える