Просмотр исходного кода

fix: Stop using ts-node in production (#4411)

* make migrate.js commonjs

* add migrate:up:prod

* mv migrate-mongo-config.js

* refactor migrations

* get migrationsDir from MIGRATIONS_DIR when dev

* reorganize npm scripts for migration

* update .eslintrc.js

* fix npm migrate script

* fix migrate script

* fix Dockerfile

* fix test
Yuki Takei 4 лет назад
Родитель
Сommit
cd2ec107f6
34 измененных файлов с 133 добавлено и 99 удалено
  1. 5 5
      package.json
  2. 2 0
      packages/app/.env.development
  3. 2 1
      packages/app/.eslintrc.js
  4. 2 1
      packages/app/docker/Dockerfile
  5. 9 4
      packages/app/migrate-mongo-config.js
  6. 8 6
      packages/app/package.json
  7. 2 3
      packages/app/src/migrations/20180926134048-make-email-unique.js
  8. 3 3
      packages/app/src/migrations/20180927102719-init-serverurl.js
  9. 3 4
      packages/app/src/migrations/20181019114028-abolish-page-group-relation.js
  10. 2 2
      packages/app/src/migrations/20190618055300-abolish-crowi-classic-auth.js
  11. 3 4
      packages/app/src/migrations/20190618104011-add-config-app-installed.js
  12. 2 2
      packages/app/src/migrations/20190619055421-adjust-page-grant.js
  13. 2 2
      packages/app/src/migrations/20190624110950-fill-last-update-user.js
  14. 2 2
      packages/app/src/migrations/20190629193445-make-root-page-public.js
  15. 2 2
      packages/app/src/migrations/20191102223900-drop-configs-indices.js
  16. 2 2
      packages/app/src/migrations/20191102223901-drop-pages-indices.js
  17. 3 3
      packages/app/src/migrations/20191126173016-adjust-pages-path.js
  18. 2 2
      packages/app/src/migrations/20191127023815-drop-wrong-index-of-page-tag-relation.js
  19. 2 3
      packages/app/src/migrations/20200402160380-remove-deleteduser-from-relationgroup.js
  20. 2 2
      packages/app/src/migrations/20200420160390-remove-crowi-layout.js
  21. 3 3
      packages/app/src/migrations/20200512005851-remove-behavior-type.js
  22. 2 2
      packages/app/src/migrations/20200514001356-update-theme-color-for-dark.js
  23. 2 3
      packages/app/src/migrations/20200620203632-normalize-locale-id.js
  24. 3 3
      packages/app/src/migrations/20200827045151-remove-layout-setting.js
  25. 3 3
      packages/app/src/migrations/20200828024025-copy-aws-setting.js
  26. 3 3
      packages/app/src/migrations/20200901034313-update-mail-transmission.js
  27. 2 2
      packages/app/src/migrations/20200901034314-update-mail-transmission-fix.js
  28. 3 3
      packages/app/src/migrations/20200903080025-remove-timeline-type.js.js
  29. 3 3
      packages/app/src/migrations/20200915035234-rename-s3-config.js
  30. 2 3
      packages/app/src/migrations/20210420160380-convert-double-to-date.js
  31. 3 3
      packages/app/src/migrations/20210830074539-update-configs-for-slackbot.js
  32. 2 3
      packages/app/src/migrations/20210906194521-slack-app-integration-set-default-value.js
  33. 3 4
      packages/app/src/migrations/20210913153942-migrate-slack-app-integration-schema.js
  34. 39 8
      packages/app/src/test/config/migrate.test.js

+ 5 - 5
package.json

@@ -43,10 +43,7 @@
     "cross-env": "^7.0.0",
     "cross-env": "^7.0.0",
     "dotenv-flow": "^3.2.0",
     "dotenv-flow": "^3.2.0",
     "npm-run-all": "^4.1.5",
     "npm-run-all": "^4.1.5",
-    "ts-node": "^9.1.1",
-    "tsconfig-paths": "^3.9.0",
-    "tslib": "^2.3.1",
-    "typescript": "^4.2.3"
+    "tslib": "^2.3.1"
   },
   },
   "devDependencies": {
   "devDependencies": {
     "@types/jest": "^26.0.22",
     "@types/jest": "^26.0.22",
@@ -67,7 +64,10 @@
     "lerna": "^4.0.0",
     "lerna": "^4.0.0",
     "rewire": "^5.0.0",
     "rewire": "^5.0.0",
     "shipjs": "^0.23.3",
     "shipjs": "^0.23.3",
-    "ts-jest": "^27.0.4"
+    "ts-jest": "^27.0.4",
+    "ts-node": "^9.1.1",
+    "tsconfig-paths": "^3.9.0",
+    "typescript": "^4.2.3"
   },
   },
   "engines": {
   "engines": {
     "node": "^12 || ^14",
     "node": "^12 || ^14",

+ 2 - 0
packages/app/.env.development

@@ -2,6 +2,8 @@
 ## Handled by Next.js with dotenv or dotenv-flow
 ## Handled by Next.js with dotenv or dotenv-flow
 ## https://nextjs.org/docs/basic-features/environment-variables
 ## https://nextjs.org/docs/basic-features/environment-variables
 ##
 ##
+MIGRATIONS_DIR=src/migrations/
+
 FILE_UPLOAD=mongodb
 FILE_UPLOAD=mongodb
 # MONGO_GRIDFS_TOTAL_LIMIT=10485760
 # MONGO_GRIDFS_TOTAL_LIMIT=10485760
 MATHJAX=1
 MATHJAX=1

+ 2 - 1
packages/app/.eslintrc.js

@@ -25,11 +25,12 @@ module.exports = {
       name: 'axios',
       name: 'axios',
       message: 'Please use src/utils/axios instead.',
       message: 'Please use src/utils/axios instead.',
     }],
     }],
+    '@typescript-eslint/no-var-requires': 'off',
+
     // set 'warn' temporarily -- 2021.08.02 Yuki Takei
     // set 'warn' temporarily -- 2021.08.02 Yuki Takei
     '@typescript-eslint/explicit-module-boundary-types': ['warn'],
     '@typescript-eslint/explicit-module-boundary-types': ['warn'],
     '@typescript-eslint/no-use-before-define': ['warn'],
     '@typescript-eslint/no-use-before-define': ['warn'],
     '@typescript-eslint/no-this-alias': ['warn'],
     '@typescript-eslint/no-this-alias': ['warn'],
-    '@typescript-eslint/no-var-requires': ['warn'],
     'jest/no-done-callback': ['warn'],
     'jest/no-done-callback': ['warn'],
   },
   },
 };
 };

+ 2 - 1
packages/app/docker/Dockerfile

@@ -112,6 +112,7 @@ RUN tar cf packages.tar \
   packages/app/public \
   packages/app/public \
   packages/app/resource \
   packages/app/resource \
   packages/app/tmp \
   packages/app/tmp \
+  packages/app/migrate-mongo-config.js \
   packages/app/.env.production* \
   packages/app/.env.production* \
   packages/app/tsconfig.base.json \
   packages/app/tsconfig.base.json \
   packages/app/tsconfig.json \
   packages/app/tsconfig.json \
@@ -163,4 +164,4 @@ VOLUME /data
 EXPOSE 3000
 EXPOSE 3000
 
 
 ENTRYPOINT ["/docker-entrypoint.sh"]
 ENTRYPOINT ["/docker-entrypoint.sh"]
-CMD ["yarn preserver && node -r dotenv-flow/config --expose_gc dist/server/app.js"]
+CMD ["yarn migrate && node -r dotenv-flow/config --expose_gc dist/server/app.js"]

+ 9 - 4
packages/app/config/migrate.js → packages/app/migrate-mongo-config.js

@@ -5,10 +5,16 @@
  * @author Yuki Takei <yuki@weseek.co.jp>
  * @author Yuki Takei <yuki@weseek.co.jp>
  */
  */
 
 
-import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '@growi/core';
-
 const { URL } = require('url');
 const { URL } = require('url');
 
 
+// get migrationsDir from env var
+const migrationsDir = process.env.MIGRATIONS_DIR;
+if (migrationsDir == null) {
+  throw new Error('An env var MIGRATIONS_DIR must be set.');
+}
+
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('@growi/core');
+
 initMongooseGlobalSettings();
 initMongooseGlobalSettings();
 
 
 const mongoUri = getMongoUri();
 const mongoUri = getMongoUri();
@@ -23,8 +29,7 @@ const mongodb = {
 };
 };
 
 
 module.exports = {
 module.exports = {
-  mongoUri,
   mongodb,
   mongodb,
-  migrationsDir: process.env.MIGRATIONS_DIR || 'src/migrations/',
+  migrationsDir,
   changelogCollectionName: 'migrations',
   changelogCollectionName: 'migrations',
 };
 };

+ 8 - 6
packages/app/package.json

@@ -14,13 +14,20 @@
     "server": "yarn cross-env NODE_ENV=production node -r dotenv-flow/config --expose_gc dist/server/app.js",
     "server": "yarn cross-env NODE_ENV=production node -r dotenv-flow/config --expose_gc dist/server/app.js",
     "server:ci": "yarn server --ci",
     "server:ci": "yarn server --ci",
     "preserver": "yarn cross-env NODE_ENV=production yarn migrate",
     "preserver": "yarn cross-env NODE_ENV=production yarn migrate",
+    "migrate": "node -r dotenv-flow/config node_modules/.bin/migrate-mongo up",
     "//// for development": "",
     "//// for development": "",
     "dev": "run-p dev:client dev:server",
     "dev": "run-p dev:client dev:server",
     "dev:client": "yarn cross-env NODE_ENV=development webpack --config config/webpack.dev.js --progress --watch",
     "dev:client": "yarn cross-env NODE_ENV=development webpack --config config/webpack.dev.js --progress --watch",
     "dev:client:nowatch": "yarn cross-env NODE_ENV=development webpack --config config/webpack.dev.js",
     "dev:client:nowatch": "yarn cross-env NODE_ENV=development webpack --config config/webpack.dev.js",
     "dev:server": "yarn cross-env NODE_ENV=development ts-node-dev --inspect --expose-gc -r tsconfig-paths/register -r dotenv-flow/config --transpile-only src/server/app.ts",
     "dev:server": "yarn cross-env NODE_ENV=development ts-node-dev --inspect --expose-gc -r tsconfig-paths/register -r dotenv-flow/config --transpile-only src/server/app.ts",
     "predev:client": "yarn cross-env NODE_ENV=development run-p resources:*",
     "predev:client": "yarn cross-env NODE_ENV=development run-p resources:*",
-    "predev:server": "yarn cross-env NODE_ENV=development yarn migrate",
+    "predev:server": "yarn cross-env NODE_ENV=development yarn dev:migrate:up",
+    "dev:migrate-mongo": "yarn cross-env NODE_ENV=development yarn ts-node node_modules/.bin/migrate-mongo",
+    "dev:migrate": "yarn dev:migrate:up",
+    "dev:migrate:create": "yarn dev:migrate-mongo create",
+    "dev:migrate:status": "yarn dev:migrate-mongo status",
+    "dev:migrate:up": "yarn dev:migrate-mongo up",
+    "dev:migrate:down": "yarn dev:migrate-mongo down",
     "//// for CI": "",
     "//// for CI": "",
     "dev:ci": "yarn dev:client:nowatch && yarn dev:server --ci",
     "dev:ci": "yarn dev:client:nowatch && yarn dev:server --ci",
     "predev:ci": "run-p resources:*",
     "predev:ci": "run-p resources:*",
@@ -39,11 +46,6 @@
     "openapi:v1": "yarn cross-env API_VERSION=1 yarn swagger-jsdoc -- \"src/server/*/*.js\" \"src/server/models/**/*.js\"",
     "openapi:v1": "yarn cross-env API_VERSION=1 yarn swagger-jsdoc -- \"src/server/*/*.js\" \"src/server/models/**/*.js\"",
     "resources:plugin": "yarn ts-node bin/generate-plugin-definitions-source.ts",
     "resources:plugin": "yarn ts-node bin/generate-plugin-definitions-source.ts",
     "resources:dl-resources": "yarn ts-node bin/download-cdn-resources.ts",
     "resources:dl-resources": "yarn ts-node bin/download-cdn-resources.ts",
-    "migrate": "yarn migrate:up",
-    "migrate:create": "yarn ts-node node_modules/.bin/migrate-mongo create -f config/migrate.js",
-    "migrate:status": "yarn ts-node node_modules/.bin/migrate-mongo status -f config/migrate.js",
-    "migrate:up": "yarn ts-node node_modules/.bin/migrate-mongo up -f config/migrate.js",
-    "migrate:down": "yarn ts-node node_modules/.bin/migrate-mongo down -f config/migrate.js",
     "ts-node": "ts-node -r tsconfig-paths/register -r dotenv-flow/config --transpile-only"
     "ts-node": "ts-node -r tsconfig-paths/register -r dotenv-flow/config --transpile-only"
   },
   },
   "// comments for dependencies": {
   "// comments for dependencies": {

+ 2 - 3
packages/app/src/migrations/20180926134048-make-email-unique.js

@@ -1,7 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getModelSafely } from '@growi/core';
-import config from '^/config/migrate';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:make-email-unique');
 const logger = loggerFactory('growi:migrate:make-email-unique');
@@ -10,7 +9,7 @@ module.exports = {
 
 
   async up(db, next) {
   async up(db, next) {
     logger.info('Start migration');
     logger.info('Start migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const User = getModelSafely('User') || require('~/server/models/user')();
     const User = getModelSafely('User') || require('~/server/models/user')();
 
 

+ 3 - 3
packages/app/src/migrations/20180927102719-init-serverurl.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:init-serverurl');
 const logger = loggerFactory('growi:migrate:init-serverurl');
@@ -20,7 +20,7 @@ module.exports = {
 
 
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     // find 'app:siteUrl'
     // find 'app:siteUrl'
     const siteUrlConfig = await Config.findOne({
     const siteUrlConfig = await Config.findOne({
@@ -77,7 +77,7 @@ module.exports = {
 
 
   async down(db) {
   async down(db) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     // remote 'app:siteUrl'
     // remote 'app:siteUrl'
     await Config.findOneAndDelete({
     await Config.findOneAndDelete({

+ 3 - 4
packages/app/src/migrations/20181019114028-abolish-page-group-relation.js

@@ -1,7 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getModelSafely } from '@growi/core';
-import config from '^/config/migrate';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
 const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
@@ -29,7 +28,7 @@ module.exports = {
 
 
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const isPagegrouprelationsExists = await isCollectionExists(db, 'pagegrouprelations');
     const isPagegrouprelationsExists = await isCollectionExists(db, 'pagegrouprelations');
     if (!isPagegrouprelationsExists) {
     if (!isPagegrouprelationsExists) {
@@ -73,7 +72,7 @@ module.exports = {
 
 
   async down(db) {
   async down(db) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const Page = getModelSafely('Page') || require('~/server/models/page')();
     const Page = getModelSafely('Page') || require('~/server/models/page')();
     const UserGroup = getModelSafely('UserGroup') || require('~/server/models/user-group')();
     const UserGroup = getModelSafely('UserGroup') || require('~/server/models/user-group')();

+ 2 - 2
packages/app/src/migrations/20190618055300-abolish-crowi-classic-auth.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:abolish-crowi-classic-auth');
 const logger = loggerFactory('growi:migrate:abolish-crowi-classic-auth');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:abolish-crowi-classic-auth');
 module.exports = {
 module.exports = {
   async up(db, next) {
   async up(db, next) {
     logger.info('Start migration');
     logger.info('Start migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     // enable passport and delete configs for crowi classic auth
     // enable passport and delete configs for crowi classic auth
     await Promise.all([
     await Promise.all([

+ 3 - 4
packages/app/src/migrations/20190618104011-add-config-app-installed.js

@@ -1,8 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getModelSafely } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:add-config-app-installed');
 const logger = loggerFactory('growi:migrate:add-config-app-installed');
@@ -19,7 +18,7 @@ module.exports = {
 
 
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const User = getModelSafely('User') || require('~/server/models/user')();
     const User = getModelSafely('User') || require('~/server/models/user')();
 
 
@@ -49,7 +48,7 @@ module.exports = {
 
 
   async down(db) {
   async down(db) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     // remote 'app:siteUrl'
     // remote 'app:siteUrl'
     await Config.findOneAndDelete({
     await Config.findOneAndDelete({

+ 2 - 2
packages/app/src/migrations/20190619055421-adjust-page-grant.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import config from '^/config/migrate';
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:adjust-page-grant');
 const logger = loggerFactory('growi:migrate:adjust-page-grant');
@@ -9,7 +9,7 @@ module.exports = {
 
 
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const Page = require('~/server/models/page')();
     const Page = require('~/server/models/page')();
 
 

+ 2 - 2
packages/app/src/migrations/20190624110950-fill-last-update-user.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import config from '^/config/migrate';
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
 const logger = loggerFactory('growi:migrate:abolish-page-group-relation');
@@ -12,7 +12,7 @@ module.exports = {
 
 
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const Page = require('~/server/models/page')();
     const Page = require('~/server/models/page')();
 
 

+ 2 - 2
packages/app/src/migrations/20190629193445-make-root-page-public.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import config from '^/config/migrate';
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:make-root-page-public');
 const logger = loggerFactory('growi:migrate:make-root-page-public');
@@ -8,7 +8,7 @@ const logger = loggerFactory('growi:migrate:make-root-page-public');
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const Page = require('~/server/models/page')();
     const Page = require('~/server/models/page')();
 
 

+ 2 - 2
packages/app/src/migrations/20191102223900-drop-configs-indices.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import config from '^/config/migrate';
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:drop-configs-indices');
 const logger = loggerFactory('growi:migrate:drop-configs-indices');
@@ -14,7 +14,7 @@ async function dropIndexIfExists(collection, indexName) {
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const collection = db.collection('configs');
     const collection = db.collection('configs');
     await dropIndexIfExists(collection, 'ns_1');
     await dropIndexIfExists(collection, 'ns_1');

+ 2 - 2
packages/app/src/migrations/20191102223901-drop-pages-indices.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import config from '^/config/migrate';
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:drop-pages-indices');
 const logger = loggerFactory('growi:migrate:drop-pages-indices');
@@ -21,7 +21,7 @@ async function dropIndexIfExists(db, collectionName, indexName) {
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     await dropIndexIfExists(db, 'pages', 'lastUpdateUser_1');
     await dropIndexIfExists(db, 'pages', 'lastUpdateUser_1');
     await dropIndexIfExists(db, 'pages', 'liker_1');
     await dropIndexIfExists(db, 'pages', 'liker_1');

+ 3 - 3
packages/app/src/migrations/20191126173016-adjust-pages-path.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
-import { pathUtils } from '@growi/core';
+import { pathUtils, getMongoUri, mongoOptions } from '@growi/core';
+
 
 
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:adjust-pages-path');
 const logger = loggerFactory('growi:migrate:adjust-pages-path');
@@ -10,7 +10,7 @@ const logger = loggerFactory('growi:migrate:adjust-pages-path');
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const Page = require('~/server/models/page')();
     const Page = require('~/server/models/page')();
 
 

+ 2 - 2
packages/app/src/migrations/20191127023815-drop-wrong-index-of-page-tag-relation.js

@@ -1,6 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import config from '^/config/migrate';
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:drop-wrong-index-of-page-tag-relation');
 const logger = loggerFactory('growi:migrate:drop-wrong-index-of-page-tag-relation');
@@ -21,7 +21,7 @@ async function dropIndexIfExists(db, collectionName, indexName) {
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     await dropIndexIfExists(db, 'pagetagrelations', 'page_1_user_1');
     await dropIndexIfExists(db, 'pagetagrelations', 'page_1_user_1');
 
 

+ 2 - 3
packages/app/src/migrations/20200402160380-remove-deleteduser-from-relationgroup.js

@@ -1,7 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getModelSafely } from '@growi/core';
-import config from '^/config/migrate';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:remove-deleteduser-from-relationgroup');
 const logger = loggerFactory('growi:migrate:remove-deleteduser-from-relationgroup');
@@ -9,7 +8,7 @@ const logger = loggerFactory('growi:migrate:remove-deleteduser-from-relationgrou
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const User = getModelSafely('User') || require('~/server/models/user')();
     const User = getModelSafely('User') || require('~/server/models/user')();
     const UserGroupRelation = getModelSafely('UserGroupRelation') || require('~/server/models/user-group-relation')();
     const UserGroupRelation = getModelSafely('UserGroupRelation') || require('~/server/models/user-group-relation')();

+ 2 - 2
packages/app/src/migrations/20200420160390-remove-crowi-layout.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const query = { key: 'customize:layout', value: JSON.stringify('crowi') };
     const query = { key: 'customize:layout', value: JSON.stringify('crowi') };
 
 

+ 3 - 3
packages/app/src/migrations/20200512005851-remove-behavior-type.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:remove-behavior-type');
 const logger = loggerFactory('growi:migrate:remove-behavior-type');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:remove-behavior-type');
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     await Config.findOneAndDelete({ key: 'customize:behavior' }); // remove behavior
     await Config.findOneAndDelete({ key: 'customize:behavior' }); // remove behavior
 
 
@@ -19,7 +19,7 @@ module.exports = {
   async down(db, client) {
   async down(db, client) {
     // do not rollback
     // do not rollback
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const insertConfig = new Config({
     const insertConfig = new Config({
       ns: 'crowi',
       ns: 'crowi',

+ 2 - 2
packages/app/src/migrations/20200514001356-update-theme-color-for-dark.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:update-theme-color-for-dark');
 const logger = loggerFactory('growi:migrate:update-theme-color-for-dark');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:update-theme-color-for-dark');
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     await Promise.all([
     await Promise.all([
       await Config.findOneAndUpdate({ key: 'customize:theme', value: JSON.stringify('default-dark') }, { value: JSON.stringify('default') }), // update default-dark
       await Config.findOneAndUpdate({ key: 'customize:theme', value: JSON.stringify('default-dark') }, { value: JSON.stringify('default') }), // update default-dark

+ 2 - 3
packages/app/src/migrations/20200620203632-normalize-locale-id.js

@@ -1,8 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getModelSafely } from '@growi/core';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:normalize-locale-id');
 const logger = loggerFactory('growi:migrate:normalize-locale-id');
@@ -10,7 +9,7 @@ const logger = loggerFactory('growi:migrate:normalize-locale-id');
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const User = getModelSafely('User') || require('~/server/models/user')();
     const User = getModelSafely('User') || require('~/server/models/user')();
 
 

+ 3 - 3
packages/app/src/migrations/20200827045151-remove-layout-setting.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:remove-layout-setting');
 const logger = loggerFactory('growi:migrate:remove-layout-setting');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:remove-layout-setting');
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const layoutType = await Config.findOne({ key: 'customize:layout' });
     const layoutType = await Config.findOne({ key: 'customize:layout' });
 
 
@@ -38,7 +38,7 @@ module.exports = {
 
 
   async down(db, client) {
   async down(db, client) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const theme = await Config.findOne({ key: 'customize:theme' });
     const theme = await Config.findOne({ key: 'customize:theme' });
     const insertLayoutType = (theme.value === '"kibela"') ? 'kibela' : 'growi';
     const insertLayoutType = (theme.value === '"kibela"') ? 'kibela' : 'growi';

+ 3 - 3
packages/app/src/migrations/20200828024025-copy-aws-setting.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:remove-layout-setting');
 const logger = loggerFactory('growi:migrate:remove-layout-setting');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:remove-layout-setting');
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const [accessKeyId, secretAccessKey] = await Promise.all([
     const [accessKeyId, secretAccessKey] = await Promise.all([
       Config.findOne({ key: 'aws:accessKeyId' }),
       Config.findOne({ key: 'aws:accessKeyId' }),
@@ -55,7 +55,7 @@ module.exports = {
 
 
   async down(db, client) {
   async down(db, client) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     await Config.deleteMany({ key: { $in: ['mail:sesAccessKeyId', 'mail:sesSecretAccessKey'] } });
     await Config.deleteMany({ key: { $in: ['mail:sesAccessKeyId', 'mail:sesSecretAccessKey'] } });
 
 

+ 3 - 3
packages/app/src/migrations/20200901034313-update-mail-transmission.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:update-mail-transmission');
 const logger = loggerFactory('growi:migrate:update-mail-transmission');
@@ -9,7 +9,7 @@ const logger = loggerFactory('growi:migrate:update-mail-transmission');
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const sesExist = await Config.findOne({
     const sesExist = await Config.findOne({
       ns: 'crowi',
       ns: 'crowi',
@@ -33,7 +33,7 @@ module.exports = {
 
 
   async down(db, client) {
   async down(db, client) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     // remote 'mail:transmissionMethod'
     // remote 'mail:transmissionMethod'
     await Config.findOneAndDelete({
     await Config.findOneAndDelete({

+ 2 - 2
packages/app/src/migrations/20200901034314-update-mail-transmission-fix.js

@@ -1,3 +1,4 @@
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
@@ -5,12 +6,11 @@ import Config from '~/server/models/config';
 const logger = loggerFactory('growi:migrate:update-mail-transmission-fix');
 const logger = loggerFactory('growi:migrate:update-mail-transmission-fix');
 
 
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
-const config = require('^/config/migrate');
 
 
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const transmissionMethod = await Config.findOne({
     const transmissionMethod = await Config.findOne({
       ns: 'crowi',
       ns: 'crowi',

+ 3 - 3
packages/app/src/migrations/20200903080025-remove-timeline-type.js.js

@@ -1,3 +1,4 @@
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
@@ -5,12 +6,11 @@ import Config from '~/server/models/config';
 const logger = loggerFactory('growi:migrate:remove-timeline-type');
 const logger = loggerFactory('growi:migrate:remove-timeline-type');
 
 
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
-const config = require('^/config/migrate');
 
 
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     await Config.findOneAndDelete({ key: 'customize:isEnabledTimeline' }); // remove timeline
     await Config.findOneAndDelete({ key: 'customize:isEnabledTimeline' }); // remove timeline
 
 
@@ -20,7 +20,7 @@ module.exports = {
   async down(db, client) {
   async down(db, client) {
     // do not rollback
     // do not rollback
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const insertConfig = new Config({
     const insertConfig = new Config({
       ns: 'crowi',
       ns: 'crowi',

+ 3 - 3
packages/app/src/migrations/20200915035234-rename-s3-config.js

@@ -1,3 +1,4 @@
+import { getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
@@ -5,7 +6,6 @@ import Config from '~/server/models/config';
 const logger = loggerFactory('growi:migrate:remove-timeline-type');
 const logger = loggerFactory('growi:migrate:remove-timeline-type');
 
 
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
-const config = require('^/config/migrate');
 
 
 const awsConfigs = [
 const awsConfigs = [
   {
   {
@@ -33,7 +33,7 @@ const awsConfigs = [
 module.exports = {
 module.exports = {
   async up(db, client) {
   async up(db, client) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const request = awsConfigs.map((awsConfig) => {
     const request = awsConfigs.map((awsConfig) => {
       return {
       return {
@@ -52,7 +52,7 @@ module.exports = {
   async down(db, client) {
   async down(db, client) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
 
 
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const request = awsConfigs.map((awsConfig) => {
     const request = awsConfigs.map((awsConfig) => {
       return {
       return {

+ 2 - 3
packages/app/src/migrations/20210420160380-convert-double-to-date.js

@@ -1,7 +1,6 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getModelSafely } from '@growi/core';
-import config from '^/config/migrate';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
@@ -9,7 +8,7 @@ const logger = loggerFactory('growi:migrate:remove-crowi-lauout');
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const Page = getModelSafely('Page') || require('~/server/models/page')();
     const Page = getModelSafely('Page') || require('~/server/models/page')();
 
 

+ 3 - 3
packages/app/src/migrations/20210830074539-update-configs-for-slackbot.js

@@ -1,7 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
+import { getMongoUri, mongoOptions } from '@growi/core';
 import Config from '~/server/models/config';
 import Config from '~/server/models/config';
-import config from '^/config/migrate';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:update-configs-for-slackbot');
 const logger = loggerFactory('growi:migrate:update-configs-for-slackbot');
@@ -16,7 +16,7 @@ const keyMap = {
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     for await (const [oldKey, newKey] of Object.entries(keyMap)) {
     for await (const [oldKey, newKey] of Object.entries(keyMap)) {
       const isExist = (await Config.count({ key: newKey })) > 0;
       const isExist = (await Config.count({ key: newKey })) > 0;
@@ -36,7 +36,7 @@ module.exports = {
 
 
   async down(db) {
   async down(db) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     for await (const [oldKey, newKey] of Object.entries(keyMap)) {
     for await (const [oldKey, newKey] of Object.entries(keyMap)) {
       const isExist = (await Config.count({ key: oldKey })) > 0;
       const isExist = (await Config.count({ key: oldKey })) > 0;

+ 2 - 3
packages/app/src/migrations/20210906194521-slack-app-integration-set-default-value.js

@@ -1,8 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
 import { defaultSupportedCommandsNameForBroadcastUse, defaultSupportedCommandsNameForSingleUse } from '@growi/slack';
 import { defaultSupportedCommandsNameForBroadcastUse, defaultSupportedCommandsNameForSingleUse } from '@growi/slack';
-import { getModelSafely } from '@growi/core';
-import config from '^/config/migrate';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 const logger = loggerFactory('growi:migrate:slack-app-integration-set-default-value');
 const logger = loggerFactory('growi:migrate:slack-app-integration-set-default-value');
@@ -10,7 +9,7 @@ const logger = loggerFactory('growi:migrate:slack-app-integration-set-default-va
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     // Add columns + set all default commands if supportedCommandsForBroadcastUse column does not exist
     // Add columns + set all default commands if supportedCommandsForBroadcastUse column does not exist
     const SlackAppIntegration = getModelSafely('SlackAppIntegration') || require('~/server/models/slack-app-integration')();
     const SlackAppIntegration = getModelSafely('SlackAppIntegration') || require('~/server/models/slack-app-integration')();

+ 3 - 4
packages/app/src/migrations/20210913153942-migrate-slack-app-integration-schema.js

@@ -1,8 +1,7 @@
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 import { defaultSupportedCommandsNameForBroadcastUse, defaultSupportedCommandsNameForSingleUse } from '@growi/slack';
 import { defaultSupportedCommandsNameForBroadcastUse, defaultSupportedCommandsNameForSingleUse } from '@growi/slack';
 
 
-import { getModelSafely } from '@growi/core';
-import config from '^/config/migrate';
+import { getModelSafely, getMongoUri, mongoOptions } from '@growi/core';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 
 
@@ -11,7 +10,7 @@ const logger = loggerFactory('growi:migrate:update-configs-for-slackbot');
 module.exports = {
 module.exports = {
   async up(db) {
   async up(db) {
     logger.info('Apply migration');
     logger.info('Apply migration');
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const SlackAppIntegration = getModelSafely('SlackAppIntegration') || require('~/server/models/slack-app-integration')();
     const SlackAppIntegration = getModelSafely('SlackAppIntegration') || require('~/server/models/slack-app-integration')();
 
 
@@ -76,7 +75,7 @@ module.exports = {
   async down(db, next) {
   async down(db, next) {
     logger.info('Rollback migration');
     logger.info('Rollback migration');
     // return next();
     // return next();
-    mongoose.connect(config.mongoUri, config.mongodb.options);
+    mongoose.connect(getMongoUri(), mongoOptions);
 
 
     const SlackAppIntegration = getModelSafely('SlackAppIntegration') || require('~/server/models/slack-app-integration')();
     const SlackAppIntegration = getModelSafely('SlackAppIntegration') || require('~/server/models/slack-app-integration')();
 
 

+ 39 - 8
packages/app/src/test/config/migrate.test.js

@@ -4,16 +4,44 @@ describe('config/migrate.js', () => {
     jest.resetModules();
     jest.resetModules();
   });
   });
 
 
+  test('throws an error when MIGRATIONS_DIR is not set', () => {
+
+    const initMongooseGlobalSettingsMock = jest.fn();
+
+    // mock for mongoose-utils
+    jest.doMock('@growi/core', () => {
+      return {
+        initMongooseGlobalSettings: initMongooseGlobalSettingsMock,
+      };
+    });
+
+    const requireConfig = () => {
+      require('^/migrate-mongo-config');
+    };
+
+    expect(requireConfig).toThrow('An env var MIGRATIONS_DIR must be set.');
+
+    jest.dontMock('@growi/core');
+
+    expect(initMongooseGlobalSettingsMock).not.toHaveBeenCalled();
+  });
+
   /* eslint-disable indent */
   /* eslint-disable indent */
   describe.each`
   describe.each`
-    MONGO_URI                                         | expectedUrl                                       | expectedDbName
-    ${'mongodb://example.com/growi'}                  | ${'mongodb://example.com/growi'}                  | ${'growi'}
-    ${'mongodb://user:pass@example.com/growi'}        | ${'mongodb://user:pass@example.com/growi'}        | ${'growi'}
-    ${'mongodb://example.com/growi?replicaSet=mySet'} | ${'mongodb://example.com/growi?replicaSet=mySet'} | ${'growi'}
-  `('returns', ({ MONGO_URI, expectedUrl, expectedDbName }) => {
+    MONGO_URI                                         | expectedDbName
+    ${'mongodb://example.com/growi'}                  | ${'growi'}
+    ${'mongodb://user:pass@example.com/growi'}        | ${'growi'}
+    ${'mongodb://example.com/growi?replicaSet=mySet'} | ${'growi'}
+  `('returns', ({ MONGO_URI, expectedDbName }) => {
+
+    beforeEach(async() => {
+      process.env.MIGRATIONS_DIR = 'testdir/migrations';
+    });
+
     test(`when 'MONGO_URI' is '${MONGO_URI}`, () => {
     test(`when 'MONGO_URI' is '${MONGO_URI}`, () => {
 
 
       const initMongooseGlobalSettingsMock = jest.fn();
       const initMongooseGlobalSettingsMock = jest.fn();
+      const mongoOptionsMock = jest.fn();
 
 
       // mock for mongoose-utils
       // mock for mongoose-utils
       jest.doMock('@growi/core', () => {
       jest.doMock('@growi/core', () => {
@@ -22,17 +50,20 @@ describe('config/migrate.js', () => {
           getMongoUri: () => {
           getMongoUri: () => {
             return MONGO_URI;
             return MONGO_URI;
           },
           },
+          mongoOptions: mongoOptionsMock,
         };
         };
       });
       });
 
 
-      const { mongoUri, mongodb } = require('^/config/migrate');
+      const { mongodb, migrationsDir, changelogCollectionName } = require('^/migrate-mongo-config');
 
 
       jest.dontMock('@growi/core');
       jest.dontMock('@growi/core');
 
 
       expect(initMongooseGlobalSettingsMock).toHaveBeenCalledTimes(1);
       expect(initMongooseGlobalSettingsMock).toHaveBeenCalledTimes(1);
-      expect(mongoUri).toBe(MONGO_URI);
-      expect(mongodb.url).toBe(expectedUrl);
+      expect(mongodb.url).toBe(MONGO_URI);
       expect(mongodb.databaseName).toBe(expectedDbName);
       expect(mongodb.databaseName).toBe(expectedDbName);
+      expect(mongodb.options).toBe(mongoOptionsMock);
+      expect(migrationsDir).toBe('testdir/migrations');
+      expect(changelogCollectionName).toBe('migrations');
     });
     });
   });
   });
   /* eslint-enable indent */
   /* eslint-enable indent */