2016-07-21 11 views
0

Rails Enginesのチュートリアルに従っています。私は、エンジンのgemファイルの中で、ホストの依存関係をすべてリストする必要があるかどうか(私は大規模なRailsアプリケーションの中でadminというRailsエンジンを作成する必要があるかどうか不思議です明らかに、エンジンは宝石を介してアクセスされる)。なぜ私はこれを行う必要がありますか?Railsエンジンの移行、スキーマダンプ、および依存関係。

また、エンジンですべてのホストの移行が必要なのはなぜですか?あるいは、エンジンは、エンジンに移行しているファイルに関連するマイグレーションを必要としているだけですか?

答えて

1

エンジンは、ホストから完全に独立している必要があります。これはコードとデータで分離されており、のいずれかのホストにドロップでき、同じように動作するはずです。つまり、エンジンにはホストの内部動作に関する特別な知識はなく、ホストにはエンジンの内部構造に関する特別な知識はありません。

あなたのエンジンはAdminというモデルに依存し、それはadminsテーブルとAdmin Sと対話するために必要なコードの100%を作成するための移行テンプレートを含める必要があります。移行テンプレートは、ホストのdb/migrationsフォルダにコピーされ、他の移行とともに実行されます。ホスト内に移行すると、エンジン自体にマイグレーションを実行しないため、エンジン自体にマイグレーションを追加しないでください。覚えておいてください。エンジンは、データベーススキーマを含め、ホストの内部に何も知らないことがあります。

この分離を作成して維持することを強くお勧めします。それはあなたの将来の大きな頭痛を救うでしょう。

エンジン内では、すべての依存関係とエンジンだけのコードを含める必要があります。エンジンがそれらについて知ることが許可されていないため、ホストに必要な依存関係やコードを追加しないでください。

これは聞こえないほど難しいですが、あなたが従うエンジンの素晴らしい例があります。コード構成、データ管理、およびテストの高品質サンプルについては、RailsAdminおよびDeviseを参照してください。

テストは重要です。エンジンが実際にページを表示したり対話するためには、Railsのような依存関係を含める必要があります。あなたはそれを行うことができますが、開発依存関係としてGemfileに追加してください。これを行う方法の例については、上のプロジェクトを参照してください。

ホストアプリケーションに依存しないテストを作成する必要があるため、エンジンプロジェクトをホストプロジェクト外に構築することをお勧めします。あなたのエンジンがテスト可能で、それ自身でうまく動作するならば、それをあなたのホストにもドロップするとうまくいくでしょう。

+0

あなたのエンジンはAdminというモデルに依存している場合、Adminsテーブルを作成するための移行テンプレートと、Adminsと対話するために必要なコードの100%が含まれている必要があります。移行テンプレートは、/migrationsフォルダに格納されていて、他のマイグレーションと一緒に実行されます。エンジン自体にマイグレーションを追加しないでください。データベーススキーマ "では、エンジンにadminsテーブルの移行テンプレートが含まれているかどうかを確認する必要がありますか? – Jwan622

+0

@ Jwan622はい、移行テンプレートは追加する必要がありますが、移行自体は追加しないでください。テンプレートをホストアプリケーションにコピーするレーキタスクを含めることができます。その後、ホストは実際の移行を実行できます。 – piersadrian