2015-10-02 3 views
4

Это мой первый день, играя с платформой Play, и мне сложно с эволюцией. Я использую Play 2.4.Запуск Evolutions в командной строке

Я выбрал пример приложения из многих, которые появляются в activator ui, он использует play-slick и play-slick-evolutions для подключения и эволюции БД.

Я просмотрел the docs, но я не могу найти способ запустить эволюции из командной строки. Когда я запускаю activator на bash, я попадаю в оболочку, а help ничего не говорит о запуске эволюции или пятна.

Я занимаюсь PHP некоторое время, поэтому я привык к возможности запускать эти строки вверх/вниз из командной строки. Я могу удалить таблицы из клиента базы данных и сделать activator run, что должно побудить меня запустить эволюцию, но я ищу правильный, ручной способ сделать это. Я предполагаю, что это возможно, так как это нужно будет сделать при развертывании.

ответ

8

Насколько я знаю, они не предназначены для запуска вручную. В разработке, Play asks запускать их: Play evolutions script application

В производстве я запускаю эволюции, начав свой сервер с параметром -DapplyEvolutions.default=true. Вы можете написать это (без -D, конечно) также в файл application.conf, чтобы запускать их всегда. Вы также можете использовать только понижающие или повышающие эволюцию с помощью -DapplyUpEvolutions.default=true или -DapplyDownEvolutions.default=true.

И, конечно, всегда есть возможность просто скопировать часть скрипта, который вам нужен, и применить его с помощью вашего любимого инструмента базы данных. Тем не менее, вам тогда нужно сообщить Play, что вы сделали, вручную изменив таблицу play_evolutions. Более простым решением было бы не использовать механизм эволюции, предоставляемый платформой воспроизведения вообще.

+1

Совершенно верно, для выполнения Evolutions необходимо запустить запущенное приложение, чтобы не запускать их из командной строки без запуска приложения. –

+3

@JonasAnso Это очень печально, на мой взгляд. :( – dotslash

+1

Действительно @dotslash –

0

Быстрый хак, который работает для меня, и не включает в себя воспитываю экземпляр игры:

export PGPASSWORD=<password> for SQL_FILE in <path-to-evolution-files>; do psql -h localhost -U <username> -c "$(sed '1,/Ups/d' <path-to-evolution-files>/$SQL_FILE | sed -n '/Downs/q;p')"; done

Удаляет все до и включать Ups и все после и в том числе Downs, и выполняет команды на экземпляр Postgres.

Смежные вопросы