#flyway
#Пролетный путь
Вопрос:
Похоже, что Flyway не может разрешить путь к классу, несмотря на то, что там есть миграции. Что я здесь делаю не так?
➜ my-project git:(main) ✗ flyway migrate
Flyway Community Edition 7.0.4 by Redgate
ERROR: Unable to resolve location classpath:db/migration.
Database: jdbc:mysql://localhost:3306/adb (MySQL 8.0)
Successfully validated 0 migrations (execution time 00:00.051s)
WARNING: No migrations found. Are your locations set up correctly?
Current version of schema `adb`: << Empty Schema >>
Schema `adb` is up to date. No migration necessary.
flyway.conf
flyway.url=jdbc:mysql://localhost:3306/adb
flyway.user=root
flyway.password=my-secret-pw
flyway.locations=db/migration/
Дерево
➜ my-project git:(main) ✗ tree .
.
├── README.md
├── db
│ └── migration
│ ├── V1.0__create_foo_table.sql
│ ├── V2.0__create_bar_table.sql
│ └── V3.0__alter_bar_table.sql
├── flyway.conf
Я также пробовал абсолютный путь, но безуспешно
Ответ №1:
Понял это — забыл файловую систему: добавить
flyway.locations=filesystem:db/migration/
Ответ №2:
Я столкнулся с другой причиной, по которой сценарии миграции не были найдены с помощью Flyway 7.8.2.
Если процесс Flyway не имеет доступа для чтения к сценарию, вместо того, чтобы выводить ошибку, он просто игнорирует существующие файлы.
Обнаружил это при использовании образа Flyway Docker в AWS Codepipeline. Изображение запускает процесс от имени пользователя с именем «flyway». Codepipeline каким-то образом удаляет «лишние» разрешения из файлов при загрузке. Поэтому необходимо выполнить «chmod 0444» файлов перед использованием Flyway.
Также рекомендуется использовать параметр -X flyway, чтобы перечислить, что он делает.