0

(既存の)gemに新しい移行を追加しましたが、rake db:migrateコマンドを実行すると、移行は完全に無視されます。rake db:migrate:redo VERSION = [私の移行バージョン]を使用して強制的に実行しようとしましたが、そのバージョンでの移行が見つからないと報告されます。

Rails3.1.3でruby1.9.2p320を使用していますが、ファイルシステムから直接使用しているため、gemのバージョンが間違っていても問題はありません(バンドルを介してインストール/更新を試みましたが) 。

また、gemで移行を定義することが正しいアプローチであるかどうかはわかりませんが、このlibはrailsサイトと高度に結合されており、特にレガシーコードであるため、絶対に必要でない限り、これを移動しません。

編集: gemの移行は、通常、任意のRailsアプリで定義されているように定義されています。

gem_folder
   |
   |- db
  ...  |
       |- migrate
            |
            |- <migration files>
                     ...
4

1 に答える 1

1

私は問題を見つけました:これらの移行を実行するためにgemで特別に定義されたrakeタスクがありました。他の誰かに役立つ場合に備えて、コードを含めます。

namespace :db do
  namespace :migrate do
    description = "Migrate the database through scripts in <gem name>/db/migrate and update db/schema.rb by invoking db:schema:dump. Target specific version with VERSION=x. Turn off output with VERBOSE=false."

    desc description
    task :admin => :environment do
      ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
      if Gem.searcher.find('<gem name>')
        dir = "#{Gem.searcher.find('<gem name>').full_gem_path}/db/migrate/"
        ActiveRecord::Migrator.migrate(dir, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
      else
        raise "Unable to locate <gem name> gem to run admin migrations"
      end
      Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
    end
  end
end
于 2012-11-06T12:57:54.313 に答える