【问题标题】:play evolution is not being applied in production heroku游戏进化未应用于生产 heroku
【发布时间】:2014-12-18 01:17:57
【问题描述】:

我在 heroku 中有一个 Play 2.3.5 应用程序。它正在运行基本进化 1.sql。 现在我推了一个新版本,但是新的2.sql没有被拾取。

我登录到 heroku 控制台 (heroku run bash) 进行第一手检查。 applyEvolutions.default=true 都在配置文件中:

~ $ egrep -v '^($|#)' target/universal/stage/conf/application.conf 
application.secret="..................."
application.langs="en"
db.default.driver=org.postgresql.Driver
db.default.url=${?DATABASE_URL}
applyEvolutions.default=true
ebean.default="models.*"
logger.root=ERROR
logger.play=INFO
logger.application=DEBUG

和命令行:

~ $ cat runheroku.sh
#!/bin/bash
IFS='/@: ' read -a array <<< "${DATABASE_URL}"
user="${array[3]}"
pass="${array[4]}"

echo $user $pass
target/universal/stage/bin/play-java -Dhttp.port=${PORT} -DapplyEvolutions.default=true    -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL} -Ddb.default.user=$user -Ddb.default.password=$pass

我正在使用 heroku postgres(亚马逊),唯一标记的演变是 1:

$ psql -h ec2-54-83-43-49.compute-1.amazonaws.com -p .... - d .... - U .... -W
=> select id,state  from play_evolutions ;
 id |  state  
----+---------
  1 | applied
(1 row)

需要明确的是,两个进化文件都在那里:

~ $ ls -l target/universal/stage/conf/evolutions/default/
total 12
-rw------- 1 uxxxxx xxxxx 6104 Dec 15 09:46 1.sql
-rw------- 1 uxxxxx xxxxx  132 Dec 15 09:46 2.sql

但是,在重新启动后,该应用似乎没有进行任何演变:

2014-12-15T09:48:31+00:00 heroku[slug-compiler]: Slug compilation finished
2014-12-15T09:48:31.341979+00:00 heroku[web.1]: State changed from up to starting
2014-12-15T09:48:34.066394+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2014-12-15T09:48:35.595535+00:00 heroku[web.1]: Process exited with status 143
2014-12-15T09:48:38.198778+00:00 heroku[web.1]: Starting process with command `./runheroku.sh`
2014-12-15T09:48:39.181686+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx384m  -Djava.rmi.server.useCodebaseOnly=true
2014-12-15T09:48:39.620271+00:00 app[web.1]: Play server process ID is 4
2014-12-15T09:48:41.419851+00:00 app[web.1]: [info] play - database [default] connected at jdbc:postgresql://ec2-54-83-43-49.compute-1.amazonaws.com:5432/xxxxxxxxxxxxxx
2014-12-15T09:48:42.914391+00:00 app[web.1]: [info] play - Application started (Prod)
2014-12-15T09:48:43.186820+00:00 app[web.1]: [info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:36021
2014-12-15T09:48:43.255944+00:00 heroku[web.1]: State changed from starting to up

我错过了什么(或混乱)?

【问题讨论】:

    标签: heroku playframework-2.0


    【解决方案1】:

    好的,找到了……基本上,我已经超过了 heroku 上免费数据库的行限制(10,000 行),并且 postgres 用户被拒绝插入。有趣的是,这一切都在默默地失败,所以我不得不手动执行进化以加载应用程序 - 然后,在我第一次涉及插入的操作时,应用程序失败并出现适当的异常。

    最后,我:

    • 获得DB付费版
    • 使用 pg:restore 从旧数据库中的快照迁移数据
    • 重新启动应用 - 失败(进化无法再次应用)
    • 手动回滚新数据库中的演变
    • 重新启动应用 - 失败(进化尝试已注册)
    • 回到旧数据库,回滚那里的手动进化
    • 将旧数据库的新快照迁移到新数据库中
    • 已重新启动...

    瞧,进化被正确应用了。

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多