6

勤めている会社でワンマンバンドをやっています。社内で使用する Rails アプリケーションを開発しています。プロジェクトの開始以来、私はソース管理に SVN を使用し、すべてではありませんがほとんどの開発をトランクで行いました。ときどき、非常に重要な変更を行う必要がある場合、ブランチを作成し、変更が完了したらマージして戻します。すべて非常に典型的です。

ただし、私が行わなければならなかったこれらの「重要な変更」のいずれも、データベースの移行に影響を与えていません。それらは常にビュー/コントローラーのものでした。

この状況では、1 つの開発ボックスを使用して、保持するか保持しないかを問わず、移行やさまざまなデータベースの変更をどのように操作すればよいでしょうか? ブランチが機能しない場合に、ブランチを破棄する前に、すべての移行をブランチの先頭に戻すことを覚えておく必要はありません。

app_branch(の代わりに)特別な開発環境とデータベースをセットアップすることを検討しましapp_developmentたが、それは実験的開発が依存しがちな「簡単な分岐」の概念に強く反対するようです。

この状況のベスト プラクティスはありますか? この状況で他の人は何をしていますか?

4

5 に答える 5

2

開発データベースを「ドロップ可能」に保つように努めています。私がそれをすべて失ったとしても、大したことではありません。私の移行では、最初から再構築する準備ができており、シード/テストデータを含むスクリプトが常にどこかにあります。特に賢くないと思います。

データベース作業のために新しいブランチが必要な場合は、それをチェックアウトし、ドロップし、作成し、レーキし、シードします。ブランチのアダンドンに行くときは、トランクから同じプロセスを再度実行する必要があるため、スクリプトを作成して実行すると思います。

于 2010-12-29T22:46:58.650 に答える
2

schema.rb ファイルがバージョン管理されていることを確認してください。そうすれば、ブランチを切り替えるときに、DB をドロップしてから、必要に応じて rake db:schema:load を実行できます。

また、本当に Git に切り替える必要があります。SVN よりもブランチ管理がはるかに簡単になります。(私は両方のプログラムでの多くの経験から話します。)

于 2011-04-29T18:01:40.923 に答える
1

異なるスキーマが必要な場合は、複数のデータベースが必要になります。「簡単な分岐」は通常、データベースではなくソース管理を指します。私の知る限り、たとえば git でブランチするようにデータベースをブランチする簡単な方法はありません。

dev/production ブランチを管理するために行うことの 1 つは、database.yml ファイルで現在の git ブランチをチェックすることです。現在のブランチが本番環境の場合は 1 つのデータベースを使用し、それ以外の場合は開発データベースを使用します。これに沿った何か:

<% if 'git branch' =~ /^\* production/
    db = 'production_database'
   else
    db = 'development_database
end %>

development:
    database: <% db %>

「production_database」は、本番データベースではなく、本番スキーマのローカル バージョンを参照することに注意してください。

于 2009-09-26T04:42:38.217 に答える
1

この正確な問題に対処するためのスクリプトを作成しました。これは git に基づいていますが、svn で動作するように簡単に変更できます。

https://gist.github.com/4076864

ブランチ名を指定すると、次のようになります。

  1. 指定されたブランチに存在しない現在のブランチの移行をロールバックします
  2. db/schema.rb ファイルへの変更を破棄します
  3. 指定されたブランチをチェックアウトします
  4. 指定されたブランチに存在する新しい移行を実行します
  5. テスト データベースを更新する

私たちのプロジェクトでは常に手動でこれを行っていることに気付いたので、このプロセスを自動化できたらいいなと思いました。

于 2012-11-15T07:03:37.667 に答える
0

重要な変更を行うブランチを作成している場合は、移行を作成するdevelopmentにデータベースのコピーを作成してから、ブランチ内のdatabase.ymlのセクションを変更できます。セクション:productionをそのままにして、ブランチをトランクにマージするときに、将来の開発のために保持するデータベースのバージョンを決定します。

これは機能リリースで行います。「db_v1」、「db_v2」など、バージョン1、2、3のローカルDBを用意します。バージョンをロールスルーすると、database.ymlバグ修正のためにトランクが最後のバージョンに留まっている間に、後続の各開発ブランチが編集されます。

于 2011-03-12T20:35:28.580 に答える