6

我尝试将一些演变推向 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 不会根据新推送的版本而更改.

4

2 回答 2

22

如果您要发送到为 1.sql生成的 Heroku 文件H2,它们很有可能会发生冲突,相反,请将 Heroku 的 url 设置为application.confasdb.default.url并首先在本地主机上以 dev 模式运行它以生成有效的 Postres SQL。此外,您还需要注释掉db.default.userdb.default.password设置,因为 Heroku 的 URL 已经包含此信息。

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

https://postgres.heroku.com/ -> YourDBs->数据库名称-> Connection settings->JDBC URL

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

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

多亏了这种方法,您可以在本地测试您的应用程序,并建立与远程 Heroku 数据库的连接,(不要感到惊讶 - 这种组合将比使用local app + local DBor慢得多Heroku app + Heroku DB)无论如何测试它比重复将小修复推送到云更好.

此外,您将能够从 localhost 执行进化 - 无需将代码推送到 Heroku,如果您的 SQL 有问题,这确实是一种更短的方法。

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

重置

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

heroku pg

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

heroku pg:reset HEROKU_DATABASE_SOMEBASE
于 2012-08-30T12:25:48.607 回答
0

我认为您对 VALUES 中数据时间字段的定义有一些问题。我发布了我的 play 2.4、Slick 3.0.3 和 postgres 的工作演变配置设置。我自动生成了放在进化文件夹中的 *.sql 文件。

在游戏 2 中重新生成进化脚本

干杯

于 2015-10-30T14:44:18.293 回答