Heroku似乎没有运行最新版本的已部署播放应用程序

时间:2014-04-20 08:41:04

标签: git scala heroku playframework playframework-2.2

昨天我将更新推送到我的Heroku应用程序,但在线版本似乎没有执行最新的代码。具体来说,我添加的新路线导致"未找到行动"错误visible here并且Akka job I schedule in Global.onStart未启动。它至少没有写入日志。

我的conf/routes文件包含行

GET     /json/matches               controllers.FeedDaemon.matches()

corresponding Controller exists并实施此操作

def matches = Action { implicit request =>
    Ok(Cache.get(keyMatches) match {
      case Some(o)  => o.asInstanceOf[String]
      case None => ""
    })
}

毋庸置疑,它在本地运作。 heroku构建没有报告任何错误,只是通过。

我正在使用游戏2.2.2。我的应用程序包含一个git子模块,是一个sbt多项目构建。 Heroku虽然检测到git子模块。如果多项目是问题,我预计会出现构建错误或ClassNotFoundExceptions

1 个答案:

答案 0 :(得分:0)

答案很简单。在2.2之前的版本中,play框架在位置target/start创建了启动脚本,因此你的Heroku Procfile看起来像

web: target/start -Dhttp.port=$PORT $JAVA_OPTS

这在Play 2.2中已更改,脚本现在位于target/universal/stage/bin/foo位置,因此您的Procfile应该如下所示

web: target/universal/stage/bin/foo -Dhttp.port=$PORT $JAVA_OPTS

这也在SO answer

中进行了解释

在我的情况下,旧应用程序已启动,因为构建输出从未被清除,因此我在构建新版本后成功启动了旧版本,而不是获取target/start文件未找到错误。

heroku-repo插件让我清除构建缓存,这会导致找不到target/start文件错误,这会让解决方案出现。