4

私のアプリではなく、私の宝石の1つにあるrake db:schema:loadを使用したいと思います。これは、私のを入れることによってdb/schema.rbすでに機能します。(コアはRailsエンジンでもある宝石です)。db:seedconfig.paths['db/seeds'] = Core::Engine.paths['db/seeds'].existentapplication.rb

ただし、db/schema.rbパスはなく、効果はconfig.pathsありconfig.paths['db'] = Core::Engine.paths['db'].existentません。

これを行う最も簡単な方法は何ですか?

4

5 に答える 5

5

これに遭遇した人は誰でも、Rails 4.0以降、エンジン構成で「db」キーを設定でき、メインアプリはそこでスキーマを検索します。

active_record / railties / databases.rake

module MyEngine
  class Engine < ::Rails::Engine
    initializer :override_db_dir do |app|
      app.config.paths["db"] = config.paths['db'].expanded
    end
  end
end
于 2015-08-27T20:10:16.877 に答える
4

Rails 3.2のソースコードhttps://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/railties/databases.rake#L400によると、SCHEMAenv変数を設定すると次のようになります。

ENV['SCHEMA'] = Core::Engine.paths['db'].existent

私が覚えているように、データベースタスクはRails 4で大幅に変更されているため、このアプローチは必ずしもRails4で機能するとは限りません。

もう1つのオプションは、gemのrakeタスク自体をオーバーライドすることです。

于 2013-03-29T13:46:01.380 に答える
2

あなたはあなたのgemから移行を得ることができます-rakegem_name:install:migrations

于 2013-03-19T11:45:13.063 に答える
1

カスタムレーキタスクを使用してみませんか?

desc 'Load a custom.rb file into the database'
  task :load_default_schema do
    file = ENV['SCHEMA'] || "path_to_your_file"
    if File.exists?(file)
      load(file)
    else
      abort %{#{file} doesn't exist yet.}
    end
  end
于 2013-03-31T15:22:48.490 に答える
0

まったく同じことではありませんが、gemでの移行をアプリケーションの一部のように動作させるには、次の操作を実行できます。スキーマを共有しようとするのではなく、自分の目的にとってより洗練されたソリューションであることがわかりました。これがお役に立てば幸いです。

Railsエンジンでの移行?

于 2013-03-31T19:54:22.157 に答える