docker run -it -e DATABASE_DRIVER='mysql' \
…
-p 8000:8000 dlevsha/compalex
Заменить на более короткую (например указать конфигурационный файл)?
Да, можно хранить переменные в .env файле и передавать путь к файлу при старте контейнера (https://stackoverflow.com/questions/30494050/how-do-i-pass-environment-variables-to-docker-containers), либо использовать docker-compose.yml (пример есть здесь https://github.com/dlevsha/compalex)
Серьёзно, докер чтобы сравнить дампы баз? И elinks?!
Если Вы разработчик, то есть большая вероятность, что Docker у Вас уже установлен и Вам не составит труда запустить контейнер.
В начале статьи я дал ссылку на большой список приложений, которые можно использовать для сравнения схем DB без установки Docker.
Elinks приведен просто в качестве примера консольного броузера и не является частью данного приложения.
Гораздо удобнее было бы задавать реквизиты подключения, а уже в интерфейсе (неоднократно) запускать процесс сравнения.
Пример использования:
Сисадмин (простите — девопс) настраивает стенд, а тестировщик/контент-менеджер занимается сверкой данных.
Когда Вы перезагрузите страничку в браузере — будет отражена "текущая ситуация". Т.е. описанный Вами кейс выполняется уже сейчас.
Технически это можно было бы сделать, но идеологически это не правильно.
Лучше использовать системы миграции, например Doctrine Migrations или Nasgrate
иногда, прямого доступа к продуктовой БД нет. Есть ли возможность выгрузить структуру БД в отдельный(ые) файл(ы), а потом сравнить его(их) со структурой локальной БД?
При этом, чтобы был полный дамп, как в Management Studio, с проверками существования объектов БД, а также учитывались секции, файловые группы, скрипт создания БД со всеми опциями и самое главное, чтобы каждый объект сохранялся в отдельный файл (для удобства сохранения в систему контроля версий). Давно ищу такой функционал, но даже SSDT не умеет работать с файловыми группами. Может кто-то подскажет?
По поводу первой части вопроса, когда у Вас нет прямого доступа к DB, но есть доступ по SSH — см. спойлер в этой статье "Вариант с пробросом коннектов к DB через SSH".
Если Вы хотите сравнить дампы, то тогда наверное проще выгрузить целиком дампы как удаленной, так и локальной DB, и сравнить их просто с помощью DIFF, как обычные текстовые файлы.
По поводу сохранения объектов в локальные файлы: готового в Compalex функционала нет, поскольку он "не про это". Но Вы можете написать подобный функционал на известном Вам языке, используя запрос по выгрузке структуры, что то вроде:
SELECT
*
FROM
[your database]..syscolumns sc,
[your database]..systypes st,
[your database]..sysobjects so
WHERE
sc.id = so.id AND
sc.xtype = st.xtype AND
so.xtype = [type] AND
st.name <> 'sysname'
Где [type]:
- FUNCTIONS => 'TF'
- TABLES => 'U'
- VIEWS => 'V'
- PROCEDURE => 'P'
Сравнение схем двух баз данных