Проблемы с обновлением Playframework 2.1 и Heroku
Я создал проект Play Framework 2.1.0 и развернул его на Heroku. В прошлую пятницу мне пришлось изменить модели данных, чтобы добавить дополнительные поля. Как только я попытался развернуть изменения, это дало мне ошибки эволюции.
Не удалось исправить проблему, я отменил измененную и развернул старую версию, но все равно получаю ошибку.
Текущая ошибка, которую я получаю это
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.
Любой может помочь мне с этим, это сводит меня с ума.
1 ответ
Есть 2 варианта:
Ваш скрипт развития неверен, вы должны проверить его на локальной базе данных postgresql в вашей среде разработки
Вы упоминаете, что уже делали развертывание раньше. Это означает, что эволюция уже началась. Но вы также упоминаете, что вы проверяете ошибки внутри
1.sql
, Если вы уже запускаете эволюции один раз, Play будет ожидать появления новых скриптов2.sql
, Это может быть причиной того, что вы получаете исключение.
Другое решение - отключить эволюции (установить evolutionplugin=disabled
в application.conf
) и внесите изменения вручную, подключившись к базе данных postgresql через клиента. Это может означать дополнительную работу, но это, вероятно, более безопасная альтернатива, чтобы не оставлять базу данных в нестабильном состоянии. Иногда контроль лучше, чем автоматизация.