Błędy w ewolucjach na Heroku

Próbowałem popchnąć jakieś ewolucje do Heroku:

2012-08-30T10:58:00+00:00 heroku[slugc]: Slug compilation finished
2012-08-30T10:58:02+00:00 heroku[web.1]: Starting process with command `target/start -Dhttp.port=32436 -Xmx384m -Xss512k
 -XX:+UseCompressedOops`
2012-08-30T10:58:03+00:00 app[web.1]: Play server process ID is 2
2012-08-30T10:58:05+00:00 app[web.1]: [←[37minfo←[0m] play - database [default] connected at [Database-address]
2012-08-30T10:58:05+00:00 app[web.1]: CREATE TABLE `unapprovedteaminfo` (
---
Copy of 1.sql
---
2012-08-30T10:58:05+00:00 app[web.1]: VALUES (1, 2, 2, '2012-01-01 00:00:00', 'k');
2012-08-30T10:58:05+00:00 app[web.1]: ERROR: syntax error at or near "`"
2012-08-30T10:58:05+00:00 app[web.1]:   Position: 14 [ERROR:0, SQLSTATE:42601]
2012-08-30T10:58:05+00:00 app[web.1]: Oops, cannot start the server.
2012-08-30T10:58:05+00:00 app[web.1]: PlayException: Database 'default' is in inconsistent state! [An evolution has not
been applied properly. Please check the problem and resolve it manually before marking it as resolved.]
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.db.evolutions.Evolutions$.checkEvolutionsState(Evolutions.scala:155)

2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.db.evolutions.Evolutions$.databaseEvolutions(Evolutions.scala:308)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.db.evolutions.Evolutions$.evolutionScript(Evolutions.scala:284)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.s
cala:412)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.s
cala:410)
2012-08-30T10:58:05+00:00 app[web.1]:   at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59
)
2012-08-30T10:58:05+00:00 app[web.1]:   at scala.collection.immutable.List.foreach(List.scala:45)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:410)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.Play$$anonfun$start$1.apply(Play.scala:60)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.Play$$anonfun$start$1.apply(Play.scala:60)
2012-08-30T10:58:05+00:00 app[web.1]:   at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59
)
2012-08-30T10:58:05+00:00 app[web.1]:   at scala.collection.immutable.List.foreach(List.scala:45)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.api.Play$.start(Play.scala:60)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.core.StaticApplication.<init>(ApplicationProvider.scala:51)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.core.server.NettyServer$.createServer(NettyServer.scala:132)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:153)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:152)
2012-08-30T10:58:05+00:00 app[web.1]:   at scala.Option.map(Option.scala:133)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.core.server.NettyServer$.main(NettyServer.scala:152)
2012-08-30T10:58:05+00:00 app[web.1]:   at play.core.server.NettyServer.main(NettyServer.scala)
2012-08-30T10:58:06+00:00 heroku[web.1]: Process exited with status 255
2012-08-30T10:58:06+00:00 heroku[web.1]: State changed from starting to crashed

Te ewolucje zadziałałyby dobrze z H2, chyba muszą być jakieś problemy ze składnią POSTGRESQL. W każdym razie, problem, który mam teraz jest to, że, nawet jeśli zmienię 1.sql i wypchnij nową wersję na Heroku, ten sam błąd pojawi się w dziennikach-skopiowany 1.sql nie zmienia się w zależności od nowej wersji.

Author: Henry Henrinson, 2012-08-30

2 answers

Jeśli wysyłasz do Heroku 1.sql Plik wygenerowany dla H2, istnieje duża szansa, że będą one sprzeczne, zamiast tego ustaw adres URL Heroku w application.conf jako db.default.url i uruchom go w trybie dev na localhost, aby najpierw wygenerować poprawny Postres SQL. Musisz również skomentować ustawienia db.default.user i db.default.password, ponieważ adres URL Heroku zawiera już te informacje.

Jeśli nie znasz adresu URL bieżącego połączenia, znajdziesz go na stronie:

Https://postgres.heroku.com/ -> YourDBs -> db-nazwa -> Connection settings -> JDBC URL

Aby połączyć się z localhost (lub innej maszyny, Nie w przestrzeni Heroku) musisz dodać ten param do URL:

&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

Dzięki takiemu podejściu możesz przetestować swoją aplikację lokalnie z ustalonym połączeniem do zdalnego dB Heroku (Nie dziw się - ta kombinacja będzie znacznie wolniejsza niż praca z local app + local DB lub Heroku app + Heroku DB) w każdym razie do testowania jest to lepsze niż wielokrotne pchanie małych poprawek do chmury.

Także będziesz w stanie wykonywać ewolucje z localhost - bez przesuwania kodu do Heroku, a to naprawdę krótsze podejście, jeśli masz problemy w SQL.

Dodatkowo jest dobra okazja, aby włączyć logowanie SQL w lokalnym trybie dev i polować na zbędne zapytania SQL, jeśli usuniesz wszystkie niepotrzebne zapytania i będziesz zadowolony na localhost, po wdrożeniu do Heroku będziesz po prostu znacznie bardziej zadowolony:) {]}

Reset

Jeśli stworzysz odpowiedni plik 1.sql najprawdopodobniej będziesz musiał zresetować swój DB zawierający nieprawidłową strukturę (jak zakładam, nie jest to jeszcze problem, ponieważ po prostu przenosisz się z lokalnego do Heroku). Najpierw znajdź nazwę DB dla bieżącej aplikacji (z bash, w folderze aplikacji):

heroku pg

A następnie zresetuj go (zniszczy wszystkie dane, więc najpierw rozważ kopię zapasową, jeśli nie chcesz stracić danych!):

heroku pg:reset HEROKU_DATABASE_SOMEBASE
 22
Author: biesior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-30 13:56:32

Myślę, że masz jakiś problem z definicją w wartościach z polem data time. Opublikowałem konfigurację evolutions dla play 2.4, Slick 3.0.3 & postgres. Automatycznie wygenerowałem *.pliki sql umieszczone w folderze evolution.

Regeneracja skryptów evolution w play 2

Cheers

 0
Author: Rene Cejas Bolecek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:05