2

Sequelize を使い始めたときは、単純force:trueにデータベースを開発用に動作させていましたが、テスト/運用に移行した今、これは明らかに適切な選択ではありません。

次のようにコードでスキーマを定義しました。

this.Users = this.sequelize.define('Users', {
  email: Sequelize.STRING,
  display: Sequelize.STRING,
  lastlogin: Sequelize.DATE,
});

this.Patterns = this.sequelize.define('Patterns', {
  name: Sequelize.STRING,
  type: Sequelize.STRING,
});
this.Patterns.belongsTo(this.Users, {as: 'Owner'});

... //a number of other models and relationships

これをデータベース初期化ワークフローに変える「正しい」方法は何ですか? 特に、これを「init」移行で行うことは理にかなっていると考えています。そうすれば、将来の移行とコードの変更がそれから機能し、将来いつでも移行のスタックを実行できるようになります。完全に最新のスキーマを取得します。

編集:私が検討し、うまくいく可能性が高いものですが、十分に「エレガントな」ソリューションとは思えません。

  • 生成された SQL を使用して新しいデータベースを初期化し、キ​​ャプチャして、新しいデータベースでforce:true実行できる「setup.sql」を作成します。
  • スキーマ全体を「移行表記法」で書き直します。これは、記述内容は同じですが、構文が厄介なほど異なります。
4

1 に答える 1

0

初期のスキーマと開発では、同期を使用できます。次に、アプリがライブになり、スキーマを変更する必要がある場合は、本番環境で実行される移行ファイルを一緒に作成する必要があります (プロセスを元に戻すこともできます)。これは、sequelize-cli で実行できます。

于 2016-09-21T23:07:57.660 に答える