TypeORM: «Нет ожидающих миграций» при попытке запустить миграции вручную - PullRequest
2 голосов
/ 09 июля 2020

У меня есть новое веб-приложение, и я написал программу-мигратор для создания пользовательской таблицы. Однако, что бы я ни пытался, typeorm, похоже, не находит этот мигратор и, следовательно, не запускает его.

Моя файловая структура (другие файлы / папки не показаны):

├── Server
│   ├── dist
|   |   ├── Migrations
|   |   |   ├── 1234567891234567890-AddUserTable.js
|   |   |   ├── 1234567891234567890-AddUserTable.js.map
|   |   |   ├── 1234567891234567890-AddUserTable.d.ts
│   ├── src
|   |   ├── Migrations
|   |   |   ├── 1234567891234567890-AddUserTable.ts
|   |   ├── app.module.ts

app.module.ts

@Module({
    imports: [
        ConfigModule.forRoot({ envFilePath: '.env' }),
        TypeOrmModule.forRootAsync({
            imports: [ConfigModule],
            useFactory: (configService: ConfigService) => ({
                type: 'mysql',
                host: configService.get('TYPEORM_HOST'),
                port: +configService.get<number>('TYPEORM_PORT'),
                username: configService.get('TYPEORM_USERNAME'),
                password: configService.get('TYPEORM_PASSWORD'),
                database: configService.get('TYPEORM_DATABASE'),
                synchronize: configService.get('TYPEORM_SYNCHRONIZE'),
                entities: [__dirname + '/**/*.entity{.ts,.js}'],
                migrations: [__dirname + '/Migrations/**/*.js'],
                migrationsRun: false,
                cli: {
                    migrationsDir: './Migrations',
                },
            }),
            inject: [ConfigService],
        }),
    ],
    controllers: [],
    providers: [],
})
export class AppModule {
    constructor(private connection: Connection) {}
}

Чтобы запустить это, в моем окне консоли я набираю: nest start, чтобы запустить мой сервер.

Затем я запускаю npx typeorm migration:run и получаю:

query: SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'myDB' AND `TABLE_NAME` = 'migrations'
query: SELECT * FROM `myDB`.`migrations` `migrations` ORDER BY `id` DESC
No migrations are pending

Если я смотрю в свою БД, я вижу таблицу migrations без записей внутри.

Я пытался удалите мой файл мигратора и создайте его снова с более свежей меткой времени, и это тоже не работает.

npx typeorm migration:create -n "MyMigratorName"

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 августа 2020

Для тех, кто приходит сюда за помощью:

В приведенной выше конфигурации упоминаются миграции, которые можно найти в js файлах:

migrations: [__dirname + '/Migrations/**/*.js'],

Однако из структуры папок ясно, что миграции записываются в ts-файлы, а не в js.

Для запуска миграции из ts следуйте официально рекомендованному способу, описанному здесь:

https://github.com/typeorm/typeorm/blob/master/docs/using-cli.md#if -entities-files- are-in-typescript

Также в этом случае не забудьте обновить blob миграции до ts:

migrations: [__dirname + '/Migrations/**/*.ts'],

Если вы хотите запустите миграции из js файлов, вам нужно будет указать местоположение из папки dist после того, как файлы ts были скомпилированы в форму js.

...