Rails アプリのデータベースの一部をクリーンアップまたは調整するスクリプトが定期的に必要です。これは多くの場合、移行の結果または移行の準備中です。
たとえば、最近rank
、テーブルに明示的な列を追加して、アルファベット順ではなく明示的な並べ替えを有効にしました。ランク列を追加したら、既存のデータを入力する必要がありました。これには、既存のデータをロードし、ランクを決定し、データベースに保存するスクリプトが必要でした。このようなスクリプトが必要になった例はたくさんあります。
問題は、本番環境への展開がスムーズに行われるように、これらのスクリプトをどのように処理するかです。私は通常、それらを移行として記述しますが、移行のコードが記述された時点では問題なく動作するが、後で展開の一部として実行されると、さまざまな理由で機能しなくなるという問題に遭遇することがよくあります。この最新の時間は、以前の移行であったために移行が実行されたときにまだ追加されていなかった列を参照する before_save コールバックが原因でした。
いくつかの戦略があるようです:
戦略 1: 段階的に展開します。したがって、さらにコミットを展開する前に実行する必要がある移行を含む 2 つのコミット A と B がある場合、A まで展開し、次に移行を実行し、次に B まで展開し、再度移行を実行し、最後にすべてを展開します。 HEADへの道。
戦略 2: 移行では AR コードを使用せず、SQL ですべてを行います。しかし、AR があまりにも便利すぎる場合もあります。
戦略 3: 私が知らない他のトリック。
人々は何をしますか?この状況でのベストプラクティスは何ですか?