【问题标题】:play framework error in New I/O worker #1 when applying evolution script (JPA and Ebean version)应用进化脚本(JPA 和 Ebean 版本)时在 New I/O worker #1 中播放框架错误
【发布时间】:2012-11-13 00:56:29
【问题描述】:

我尝试在 oracle 10g 数据库上设置计算机数据库示例,但进化脚本出现错误: 创建示例的play_evolution 表和CompanyComputer 表后,请我制作进化脚本以将数据放入这些数据库:

但是当我尝试Apply this script now! 时,我得到了这个结果:

2012-11-26 11:33:12,324 - [INFO] - from play in play-akka.actor.default-dispatcher-1 
database [default] connected at jdbc:oracle:thin:@10.0.2.15:1521:orcl

2012-11-26 11:33:13,166 - [ERROR] - from application in New I/O  worker #1 


! @6celgd3g6 - Internal server error, for request [GET /] ->

play.api.db.evolutions.InvalidDatabaseRevision: Database 'default' needs evolution! [An SQL script need to be run on your database.]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1$$anonfun$apply$1.apply$mcV$sp(Evolutions.scala:427) ~[play_2.9.1.jar:2.0.4]
    at play.api.db.evolutions.EvolutionsPlugin.withLock(Evolutions.scala:448) ~[play_2.9.1.jar:2.0.4]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:414) ~[play_2.9.1.jar:2.0.4]
    at play.api.db.evolutions.EvolutionsPlugin$$anonfun$onStart$1.apply(Evolutions.scala:412) ~[play_2.9.1.jar:2.0.4]
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.3]
    at scala.collection.immutable.List.foreach(List.scala:45) ~[scala-library.jar:0.11.3]
    at play.api.db.evolutions.EvolutionsPlugin.onStart(Evolutions.scala:412) ~[play_2.9.1.jar:2.0.4]
    at play.api.Play$$anonfun$start$1.apply(Play.scala:60) ~[play_2.9.1.jar:2.0.4]
    at play.api.Play$$anonfun$start$1.apply(Play.scala:60) ~[play_2.9.1.jar:2.0.4]
    at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) ~[scala-library.jar:0.11.3]
    at scala.collection.immutable.List.foreach(List.scala:45) ~[scala-library.jar:0.11.3]
    at play.api.Play$.start(Play.scala:60) ~[play_2.9.1.jar:2.0.4]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anonfun$1.apply(ApplicationProvider.scala:125) ~[play_2.9.1.jar:2.0.4]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0.4]
    at scala.Option.map(Option.scala:133) ~[scala-library.jar:0.11.3]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply(ApplicationProvider.scala:112) ~[play_2.9.1.jar:2.0.4]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$3.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.4]
    at scala.Either$RightProjection.flatMap(Either.scala:277) ~[scala-library.jar:0.11.3]
    at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.4]
    at play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:110) ~[play_2.9.1.jar:2.0.4]
    at akka.dispatch.Future$$anon$3.liftedTree1$1(Future.scala:195) ~[akka-actor.jar:2.0.2]
    at akka.dispatch.Future$$anon$3.run(Future.scala:194) ~[akka-actor.jar:2.0.2]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:94) ~[akka-actor.jar:2.0.2]
    at akka.jsr166y.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1381) ~[akka-actor.jar:2.0.2]
    at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259) ~[akka-actor.jar:2.0.2]
    at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) ~[akka-actor.jar:2.0.2]
    at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1479) ~[akka-actor.jar:2.0.2]
    at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) ~[akka-actor.jar:2.0.2]

并且应用程序停留在needs evolution page 上,并且数据库中的表是空的,因此显然脚本失败了(我直接在 SQL 上尝试将它放入 oracle 10g 并且脚本正在运行)。谁能帮我解决这个问题?

编辑 1:这是我的配置文件

application.name=computer-database
application.secret="E27D^[_<Lpt0vjad]de;3/i;tx3gpRmG4Byof/3nahO/dIo9gbsMWut1w3xg[>9W"

db.default.url="jdbc:oracle:thin:@10.0.2.15:1521:orcl"
db.default.driver=oracle.jdbc.driver.OracleDriver
db.default.user=play
db.default.password=play

ebean.default="models.*"

"assets.cache./public/stylesheets/bootstrap.min.css"="max-age=3600"

logger=ERROR

logger.play=INFO

logger.application=DEBUG

编辑 2: 我已尝试使用示例的 JPA 版本:我收到了类似的错误: 相同的屏幕 (Database 'default' needs evolution!),当我点击 Apply this script now! 时,我在日志文件中得到完全相同的堆栈错误

编辑 3: 当我清理数据库时,应用程序要求我制作第一个进化脚本(表的结构和同时的数据),所以我接受应用它:他在我的数据库上创建了表,但他没有插入数据并打印我被阻止的第二个屏幕......在开始时,当应用程序尝试创建 play_evolution 表时出现错误。经过一番谷歌搜索后,我发现 play_evolution 的代码显然不能与 oracle 一起使用,因为字段类型错误......所以我手动创建了它

【问题讨论】:

  • 看看是不是configuration problem
  • 它不起作用(更糟),因为没有用户字符串:x,应用程序无法连接到我的数据库。我编辑我的帖子以放置配置文件,但我不确定这是连接字符串到我的数据库的问题,因为应用程序访问数据库以检查数据库的内容是否正常。如果我的登录名或密码或连接字符串错误,我认为会出现另一个错误
  • 你的数据库允许足够的连接吗?
  • 我试过了:SELECT name, value FROM v$parameter WHERE name = 'sessions' 结果是 170 所以我觉得没问题
  • 没人能帮我吗?

标签: java oracle playframework oracle10g playframework-2.0


【解决方案1】:

看来您的配置可能有误,您的示例说:

db.default.pass=play

什么时候应该:

db.default.password=play

请参阅configuration 文档。

另外,请尝试彻底擦除数据库,以防万一。

编辑评论:

似乎您的数据库由于某种原因进入了不稳定的位置(进化方面),但日志没有帮助。您正在运行 Play 2.0.4(最新版本)吗?

鉴于这是一个示例项目,我将通过解决方法解决此问题:

  • 通过在application.conf 中取消注释evolutionplugin=disabled 来禁用进化
  • 在您的数据库上手动运行脚本

在这个阶段,数据库将拥有您需要的数据。如果某些连接/数据类型问题是错误的来源,您将在运行应用程序时在日志中看到它,否则一切正常。

您还应该在Lighthouse 上就该问题提出投诉,因为这似乎很严重。

【讨论】:

  • 更改 db.default.password 并清理 DB = 相同的结果。我编辑了我的帖子以插入更多信息来帮助我们。
  • 是的,我使用 play 2.0.4。好吧,它适用于evolutionplugin=disabled,但对我来说这不是一个“真正的解决方案”。我会在灯塔上张贴一张票
【解决方案2】:

application.conf 中使用evolutionplugin=disabled 解决了问题,因此这不是真正的解决方案。于是我创建了一张票here

请阅读它以找到解决方案!

【讨论】:

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