Heroku演变中的错误

时间:2012-08-30 11:11:42

标签: postgresql heroku playframework playframework-2.0

我尝试将一些进化推向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

这些演进对H2很好用,我想POSTGRESQL语法肯定存在一些问题。无论如何,我现在遇到的问题是,即使我更改1.sql并在Heroku上推送新版本,同样的错误也会显示在日志中 - 复制的1.sql不会根据新推送的版本而改变

2 个答案:

答案 0 :(得分:22)

如果您要发送为1.sql生成的Heroku H2文件,则很可能会发生冲突,而是将application.conf中的Heroku网址设置为db.default.url首先在localhost上以dev模式运行它以生成有效的Postres SQL。此外,您还需要注释掉db.default.userdb.default.password设置,因为Heroku的网址已包含此信息。

如果您不知道当前连接的URL,您将在以下位置找到它:

https://postgres.heroku.com/ - &gt; YourDBs - &gt; db-name - &gt; Connection settings - &gt; JDBC URL

要从localhost(或其他计算机,而不是Heroku的空间)连接,您需要将此参数添加到URL:

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

由于采用了这种方法,您可以通过与远程Heroku数据库建立的连接在本地测试您的应用程序(不要感到惊讶 - 这种组合比使用local app + local DBHeroku app + Heroku DB慢得多)无论如何,测试它比反复推动小修复到云更好。

此外,您还可以从localhost执行演进 - 无需将代码推送到Heroku,如果您的SQL出现问题,这种方法确实更短。

此外,在本地开发模式下打开SQL日志记录并寻找冗余SQL查询的好时机,如果你将删除所有不必要的查询并在localhost上满足,在部署到Heroku之后,你将会很多更满意:))

重置

如果您要创建正确的1.sql文件,那么您可能需要重置包含无效结构的数据库(因为我认为这不是问题,因为您只是从本地迁移到Heroku)。首先找到当前应用程序的DB名称(使用bash,在app的文件夹中):

heroku pg

然后重置它(它将破坏所有数据,因此如果您不想丢失数据,请先考虑备份!):

heroku pg:reset HEROKU_DATABASE_SOMEBASE

答案 1 :(得分:0)

我认为您在VALUES中使用数据时间字段的定义存在一些问题。我发布了我的工作evolutions配置设置为播放2.4,Slick 3.0.3&amp; Postgres的。我自动生成了放在evolution文件夹中的* .sql文件。

BBC News Home page

干杯