Проблемы с обновлением Playframework 2.1 и Heroku

Я создал проект play framework 2.1.0 и развернул его на героку. В прошлую пятницу мне пришлось изменить модели данных, чтобы добавить дополнительные поля. Как только я попытался развернуть изменения, это дало мне ошибки эволюции.

Не удалось исправить проблему, я отменил измененную и развернул старую версию, но все равно получаю сообщение об ошибке.

Текущая ошибка, которую я получаю, это

 database [default] connected at jdbc:postgresql: ...
 Position: 27 [ERROR:0, SQLSTATE:42601]
 ERROR: syntax error at or near "FALSE"
at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1$$anonfun$apply$1.apply$mcV$sp(Evolutions.scala:435)
Oops, cannot start the server.
at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:434)
at play.api.db.evolutions.Evolutions$.evolutionScript(Evolutions.scala:306)
at scala.collection.immutable.List.foreach(List.scala:309)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
at play.api.Play$.start(Play.scala:62)
at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:432)
@6ele4bdao: Database 'default' is in inconsistent state!
....

Для развертывания я использую следующее, используя эту строку procfile:

web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyDownEvolutions.default=true -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${POSTGRESQL_URL}

Также, как было предложено, я использовал heroku pg:psql вместе с SELECT id, last_problem FROM play_evolutions;, чтобы узнать об ошибке, и он говорит syntax error at or near "FALSE", но я не вижу никаких ложных результатов в моем файле 1.sql.

Любой может помочь мне с этим, это сводит меня с ума.


person Hugo Alves    schedule 24.06.2013    source источник


Ответы (1)


Есть 2 варианта:

  • Ваш сценарий эволюции неверен, вы должны протестировать его на локальной базе данных postgresql в вашей среде разработки.

  • Вы упомянули, что уже делали развертывание раньше. Это означает, что эволюция уже была запущена. Но вы также упоминаете, что проверяете наличие ошибок внутри 1.sql. Если вы уже запускали эволюцию один раз, Play ожидает, что новые скрипты будут в 2.sql. Это может быть причиной того, что вы получаете исключение.

Другое решение — отключить эволюции (установить evolutionplugin=disabled в application.conf) и внести изменения вручную, подключившись к базе данных postgresql через клиент. Это может означать дополнительную работу, но, вероятно, это более безопасная альтернатива, позволяющая не оставлять базу данных в нестабильном состоянии. Иногда контроль лучше, чем автоматизация.

person Pere Villega    schedule 24.06.2013
comment
Спасибо за помощь. Должен ли 2.sql генерироваться автоматически или я должен переименовать сгенерированный 1.sql? У меня не запускалось локально. Также я проверил свой локальный postgresql, и это сработало. Итак, я закончил тем, что использовал опцию вручную и удалил таблицы - person Hugo Alves; 24.06.2013
comment
вы должны создать новый файл, чтобы у вас были 1.sql и 2.sql. Play не будет автоматически генерировать файлы эволюции, вам нужно их создать. - person Pere Villega; 24.06.2013
comment
как протестировать эволюцию локально? - person アレックス; 18.12.2013