0

最近作成した別の Rails 3 プラグインを使用する Rails 3 プラグインを作成しています。それらを7月と8月としましょう。そこで、8 月の gemspec に次の行を追加します。

s.add_dependency "july", "~> 0.0.1"

そして私は走りbundle installます。次に、いくつかのモデルとフィクスチャを作成します。次に、データベースを移行する必要があります。

$ cd test/dummy
$ rake august:install:migrations
$ rake db:migrate

現在、8 月 (私が作成しているプラ​​グイン) のテーブルは開発データベースとテスト データベースにありますが、7 月のテーブルはありません。しかし、8 月のテーブルには 7 月のテーブルへの外部キーがあるため、テストを実行する前に、7 月のテーブルを作成し、適切なフィクスチャを記述する必要があります。rake -T私は走って見ることを期待します

rake august:install:migrations
rake july:install:migrations

しかし、私が見るのはaugustレーキタスクだけです。では、7 月のデータベース テーブルを作成するにはどうすればよいでしょうか (7 月のコードベースで既に行っているため、DRY に違反する新しい移行を作成する以外に)。

4

1 に答える 1

0

ダミーアプリは、「7月」のレーキタスクをロードするために「7月」に直接依存している必要があります。したがって、gempspecではなくGemfileに含める必要があります。ただし、Gemfileにbundle install「8月」を入れた後、実際の(ダミーではない)アプリを7月にインストールするように強制することはありません。

したがって、両方の場所に含める必要があります。つまり、rakeタスクのGemfile(およびこれはグループに含めることができます)と、依存関係のインストールを強制:developmentするgemspec(add_dependencyまたはを使用)に含める必要があります。add_runtime_dependencyそれが解決策ですが、理由はわかりません。

ここでのコメントでこれについての私の考えを説明しようとしましたが、この設計方法論を説明するロジックを正確に特定することはできませんでした。誰かが本当の理由を説明してもらえますか?

于 2012-09-21T12:36:52.293 に答える