-
-
Notifications
You must be signed in to change notification settings - Fork 4
マイグレーション
Koki Takahashi edited this page Jul 28, 2017
·
9 revisions
データベースのスキーマを変更した場合、もしくはステージのデータを変更した場合、デプロイ時にサーバーを隔離し、ステージのマイグレーションを行う必要がある。
-
メンテナンスモードをオンにする。
Webインターフェースから変更、もしくはCLIから実行。
-
データベースのバックアップを取る。
Webインターフェースから実行、もしくはCLIから実行。
-
masterブランチにpushする(もしくはプルリクをマージする)
-
Travisでビルドが走り、その後Herokuの自動デプロイが完了するのを待つ。
-
マイグレーションを行う。(以下参照)
-
マイグレーションが成功したら、メンテナンスモードをOFFにする。
-
mnemo.proにアクセスし、正常に動くことを確認する。
Heroku Toolbelt でbashを立ち上げたあと、sequelize-cliをインストールし、sequelize db:migrate
を実行。
$ heroku run --app mnemo-api bash
Running bash on ⬢ mnemo-api... up, run.2927 (Free)
~ $ ls
CNAME README.md assets bin index.less lib node_modules stages
Procfile api benchmark image index.pug modals package.json test
~ $ npm i sequelize-cli -g
(略)
~ $ cd api
~/api $ sequelize db:migrate
Sequelize [Node: 6.9.1, CLI: 2.4.0, ORM: 3.25.0]
Loaded configuration file "config/config.json".
Using environment "production".
== 20161202090513-add-version-column: migrating =======
== 20161202090513-add-version-column: migrated (0.080s)
~/api $ exit
exit
$
ステージの内容を変更した場合は、必ず事前にそのステージのバージョンを1上げ、submissionsのマイグレーションと検証を行う。
validatorやblockの内容の変更など、すべてのステージに影響のある変更を行った場合には、すべてのステージのバージョンを上げる。
参考: すべてのステージデータのバージョンを一気に上げる方法
find ./stages -type f | xargs sed -i -r 's/(.*)(version: )([0-9]+)(.*)/echo "\1\2$((\3+1))\4"/ge'
マイグレージョンを行うには、Heroku Toolbelt でbashを立ち上げ、node scripts/migrateStages.js
を実行する。
$ heroku run --app mnemo-api bash
Running bash on ⬢ mnemo-api... up, run.2927 (Free)
~ $ ls
CNAME README.md assets bin index.less lib node_modules stages
Procfile api benchmark image index.pug modals package.json test
~ $ cd api
~/api $ node scripts/migrateStages.js
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): START TRANSACTION;
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Getting stages...
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): SELECT "id", "name", "migratedVersion", "createdAt", "updatedAt" FROM "stages" AS "stages";
Got 40 stages
Migrating 1 stages...
Migrating "wire01" stage... (version: 1 => 2)
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): SELECT "id", "name", "board", "blocks", "clocks", "score", "stageId", "version", "createdAt", "updatedAt" FROM "submissions" AS "submissions" WHERE "submissions"."stageId" = 1 AND "submissions"."version" = 1;
Migrating 33 submissions...
Validating submission from tsg of score 10000
validation: 17.475ms
Validation Succeeded. (score: 10000 => 10000)
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): UPDATE "submissions" SET "version"=2,"updatedAt"='2016-12-03 07:52:09.213 +00:00' WHERE "id" = 4
(略)
Validating submission from sannko of score 10000
validation: 2.291ms
Validation Succeeded. (score: 10000 => 10000)
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): UPDATE "submissions" SET "version"=2,"updatedAt"='2016-12-03 07:52:09.611 +00:00' WHERE "id" = 293
Updating migratedVersion of "wire01" stage...
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): UPDATE "stages" SET "migratedVersion"=2,"updatedAt"='2016-12-03 07:52:09.616 +00:00' WHERE "id" = 1
Executing (d6b09afb-18c4-4426-88db-e3eac850b538): COMMIT;
done.
~/api $ exit
exit
$