我在Heroku上托管了一个使用数据库迁移插件的Grails应用程序。应用程序重新启动时,它会在启动时停止运行,而不会发出任何帮助消息:
2012-11-12T11:21:06+00:00 app[web.1]: Configuring Spring Security Core ...
2012-11-12T11:21:06+00:00 app[web.1]: ... finished configuring Spring Security Core
2012-11-12T11:21:06+00:00 app[web.1]:
2012-11-12T11:21:22+00:00 heroku[web.1]: Stopping process with SIGKILL
2012-11-12T11:21:22+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2012-11-12T11:21:24+00:00 heroku[web.1]: Process exited with status 137
2012-11-12T11:21:34+00:00 heroku[router]: Error H20 (App boot timeout) -> GET abc.herokuapp.com/ dyno= queue= wait=75000ms service= status=503 bytes=
2012-11-12T11:22:34+00:00 heroku[router]: Error H20 (App boot timeout) -> GET abc.herokuapp.com/ dyno= queue= wait=75000ms service= status=503 bytes=
2012-11-12T11:25:10+00:00 heroku[router]: Error H10 (App crashed) -> GET abc.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=
经过一番调查后,我发现发生了这种情况,因为DATABASECHANGELOGLOCK表上有一条LOCKED = TRUE的记录。 当我手动将LOCKED值设置为FALSE并重新启动应用程序时,启动过程完成没有问题。
我的问题是:
答案 0 :(得分:0)
在引导过程中杀死应用程序并且数据库迁移无法完成其db事务时,我的项目中出现此问题。
liquibase(数据库迁移使用的底层库)的作用是,它创建锁定条目,然后启动数据库事务以处理需要应用的所有更改集。如果db事务无法成功提交,则锁定条目将保留在DATABASECHANGELOGLOCK
。
前一段时间liquibase forum已经提出了同样的问题。
DATABASECHANGELOG
表记录成功应用的数据库更改集,您可以使用dbm-db-doc或DbDocController可视化此信息(或者您可以直接使用SQL访问db表) ,当然)。