rake db:seed
作業を開始するために、DB の基本の一部を入力しすぎることを使用する Rails アプリケーションがあります。これは、小さなインフラストラクチャと、YAML を DB にロードするために誰かが作成した Fixtures.rb を介して機能します。
私がやろうとしているのは、このインフラストラクチャを自分の宝石に移動して、他の場所で再び使用できるようにすることです。これには、自分の宝石のモデルのいくつかを宝石のシードタスク (私が望むもの) を介して挿入する必要があります。メインアプリでの呼び出しdb:seed
または同様のものから実行されていること)、メインアプリが独自のシードを使用してgemのモデルの一部をプッシュすること。これの 2 番目の部分は、私が既に作業を行っています。これは、与えられた Fixtures.rb ファイルの簡単な修正でした。今やりたいこと:
- Fixtures.rb を gem に移動します。gem でこれを実行するソースはまだありません。これを行うには、おそらく からファイルを要求し、
[MyGem::Engine.root, 'lib', ...].join
YAML ファイルを DB にロードするためのパスを指定してメソッドを呼び出すことができますが、これが機能しない理由はわかりません。 - 私
rake db:seed
の宝石で定義されたタスクを実行します。gem (エンジン) の lib/tasks の下に .rake ファイルを追加しましたが、メイン アプリの rakefile から呼び出すことができないようです。
明確にするために、私がやりたいことは、gem (メインアプリではなく、またはメインアプリの1行のコード) を使用して、メインアプリのシードタスクに依存関係を追加し、誰かがrake db:seed
メインアプリで実行されたときにgem は、メインのアプリ開発者がそれらについて知る必要なく、追加のシードを実行します。
私が避けたい汚い解決策は、メイン アプリ内の gem から .rake ファイルをロードするか、メイン アプリ内の gem から .rake ファイルを gem にロードすることです。
だから私が求めているのは、基本的rake db:seed
に、gemfileに必要なgemを持つだけで、gem化されたエンジン内で定義されたタスクをタスクに実行させる方法ですか?