在 Heroku 上部署 Play Framework 2.4 时出错
Error deploying Play Framework 2.4 on Heroku
我正在尝试在 Heroku 上部署一个 Play Framework (Java) 应用程序 (v 2.4),但是当我执行命令时 git push heroku master
我得到以下异常:
remote: [warn] ::::::::::::::::::::::::::::::::::::::::::::::
remote: [warn] :: UNRESOLVED DEPENDENCIES ::
remote: [warn] ::::::::::::::::::::::::::::::::::::::::::::::
remote: [warn] :: com.typesafe.sbtrc#client-2-11;0.3.1: not found
remote: [warn] :: com.typesafe.sbtrc#actor-client-2-11;0.3.1: not found
remote: [warn] ::::::::::::::::::::::::::::::::::::::::::::::
remote: [warn]
remote: [warn] Note: Unresolved dependencies path:
remote: [warn] com.typesafe.sbtrc:client-2-11:0.3.1
remote: [warn] +- com.typesafe.play:fork-run-protocol_2.11:2.4.3 ((play.sbt.forkrun.PlayForkRun) PlayForkRun.scala#L48)
remote: [warn] +- com.typesafe.play:fork-run_2.11:2.4.3 ((play.sbt.forkrun.PlayForkRun) PlayForkRun.scala#L48)
remote: [warn] +- escarbajo:escarbajo_2.11:1.0-SNAPSHOT
remote: [warn] com.typesafe.sbtrc:actor-client-2-11:0.3.1
remote: [warn] +- com.typesafe.play:fork-run_2.11:2.4.3 ((play.sbt.forkrun.PlayForkRun) PlayForkRun.scala#L48)
remote: [warn] +- escarbajo:escarbajo_2.11:1.0-SNAPSHOT
remote: sbt.ResolveException: unresolved dependency: com.typesafe.sbtrc#client-2-11;0.3.1: not found
remote: unresolved dependency: com.typesafe.sbtrc#actor-client-2-11;0.3.1: not found
remote: at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:291)
remote: at sbt.IvyActions$$anonfun$updateEither.apply(IvyActions.scala:188)
remote: at sbt.IvyActions$$anonfun$updateEither.apply(IvyActions.scala:165)
remote: at sbt.IvySbt$Module$$anonfun$withModule.apply(Ivy.scala:155)
remote: at sbt.IvySbt$Module$$anonfun$withModule.apply(Ivy.scala:155)
remote: at sbt.IvySbt$$anonfun$withIvy.apply(Ivy.scala:132)
remote: at sbt.IvySbt.sbt$IvySbt$$action(Ivy.scala:57)
remote: at sbt.IvySbt$$anon.call(Ivy.scala:65)
remote: at xsbt.boot.Locks$GlobalLock.withChannel(Locks.scala:93)
remote: at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries(Locks.scala:78)
remote: at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock.apply(Locks.scala:97)
remote: at xsbt.boot.Using$.withResource(Using.scala:10)
remote: at xsbt.boot.Using$.apply(Using.scala:9)
remote: at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58)
remote: at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48)
remote: at xsbt.boot.Locks$.apply0(Locks.scala:31)
remote: at xsbt.boot.Locks$.apply(Locks.scala:28)
remote: at sbt.IvySbt.withDefaultLogger(Ivy.scala:65)
remote: at sbt.IvySbt.withIvy(Ivy.scala:127)
remote: at sbt.IvySbt.withIvy(Ivy.scala:124)
remote: at sbt.IvySbt$Module.withModule(Ivy.scala:155)
remote: at sbt.IvyActions$.updateEither(IvyActions.scala:165)
remote: at sbt.Classpaths$$anonfun$sbt$Classpaths$$work.apply(Defaults.scala:1369)
remote: at sbt.Classpaths$$anonfun$sbt$Classpaths$$work.apply(Defaults.scala:1365)
remote: at sbt.Classpaths$$anonfun$doWork$$anonfun.apply(Defaults.scala:1399)
remote: at sbt.Classpaths$$anonfun$doWork$$anonfun.apply(Defaults.scala:1397)
remote: at sbt.Tracked$$anonfun$lastOutput.apply(Tracked.scala:37)
remote: at sbt.Classpaths$$anonfun$doWork.apply(Defaults.scala:1402)
remote: at sbt.Classpaths$$anonfun$doWork.apply(Defaults.scala:1396)
remote: at sbt.Tracked$$anonfun$inputChanged.apply(Tracked.scala:60)
remote: at sbt.Classpaths$.cachedUpdate(Defaults.scala:1419)
remote: at sbt.Classpaths$$anonfun$updateTask.apply(Defaults.scala:1348)
remote: at sbt.Classpaths$$anonfun$updateTask.apply(Defaults.scala:1310)
remote: at scala.Function1$$anonfun$compose.apply(Function1.scala:47)
remote: at sbt.$tilde$greater$$anonfun$$u2219.apply(TypeFunctions.scala:40)
remote: at sbt.std.Transform$$anon.work(System.scala:63)
remote: at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
remote: at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
remote: at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
remote: at sbt.Execute.work(Execute.scala:235)
remote: at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
remote: at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
remote: at sbt.ConcurrentRestrictions$$anon$$anonfun.apply(ConcurrentRestrictions.scala:159)
remote: at sbt.CompletionService$$anon.call(CompletionService.scala:28)
remote: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
remote: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
remote: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
remote: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
remote: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
remote: at java.lang.Thread.run(Thread.java:745)
remote: [error] (*:update) sbt.ResolveException: unresolved dependency: com.typesafe.sbtrc#client-2-11;0.3.1: not found
remote: [error] unresolved dependency: com.typesafe.sbtrc#actor-client-2-11;0.3.1: not found
remote: [error] Total time: 20 s, completed Oct 24, 2015 9:02:27 PM
remote:
remote: ! ERROR: Failed to run sbt!
remote: We're sorry this build is failing. If you can't find the issue in application
remote: code, please submit a ticket so we can help: https://help.heroku.com
remote: You can also try reverting to the previous version of the buildpack by running:
remote: $ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-scala#previous-version
remote:
remote: Thanks,
remote: Heroku
remote:
remote:
remote: ! Push rejected, failed to compile Play 2.x - Java app
remote:
remote: Verifying deploy...
remote:
remote: ! Push rejected to protected-lowlands-4290.
remote:
To https://git.heroku.com/protected-lowlands-4290.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/protected-lowlands-4290.git'
我到处寻找解决方案,发现了一些对其他人有用的东西,但在这种情况下却行不通。我尝试了以下方法:
- 将行
project/play-fork-run.sbt
添加到 .gitignore
文件。
- 删除文件
play-fork-run.sbt
.
- 将这些解析器添加到
build.stb
文件:
解析器 += Resolver.url("Typesafe Ivy", url("<a href="http://repo.typesafe.com/typesafe/ivy-snapshots" rel="nofollow">http://repo.typesafe.com/typesafe/ivy-snapshots</a>"))(Resolver.ivyStylePatterns)
解析器 += "Typesafe" 在“<a href="http://repo.typesafe.com/typesafe/releases/" rel="nofollow">http://repo.typesafe.com/typesafe/releases/</a>”
但似乎没有任何效果,当我在本地主机上编译和 运行 应用程序时,它运行完美。
有解决这个问题的想法吗?
非常感谢任何帮助!
谢谢
这在 localhost 上起作用的原因是您可能 运行 activator
在某些时候将有问题的依赖项下载到本地 .ivy2
缓存。但是在 Heorku 上,只有 sbt
运行s,并且激活器中有一个 major 的错误,很长时间都没有修复,导致之间的解析器不同激活剂和 sbt。
听起来您已经看过这些报告,其中包含一些建议(大部分是您已经尝试过的):
- https://github.com/typesafehub/activator/issues/979
- https://github.com/typesafehub/activator/issues/1058
- https://github.com/typesafehub/activator/issues/1057
- https://github.com/typesafehub/activator/issues/1036
潜在的问题是对此的依赖:
addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "2.4.3")
仔细检查 project/
下的所有 sbt 文件,确保其中没有任何依赖项。在推送到 Heroku 之前,还要确保你的 Git 存储库更改已经提交。
最后,如果您仍然卡住了,您可以切换到使用 sbt-heroku plugin,它使用本地编译的资产并将它们部署到 Heroku。这将一起避免问题。
此外,我建议您在 Play mailing list 上提出这个问题。这是一个长期存在的问题,我遇到过很多人遇到过这个问题。 Typesafe 的工作人员需要听取用户的意见,了解这种情况有多猖獗。
对于 Play 应用,请确保满足以下条件:
- 删除
<project root folder>/project/play-fork-run.sbt
- 删除
<project root folder>/project/sbt-ui.sbt
- 从
<project root folder>/build.sbt
中删除 fork in run := true
除非 你 明确想要它。
此外:确保文件 play-fork-run.sbt
和 sbt-ui.sbt
在您的 .gitignore
中并且尚未签入您的项目。
如上所述,如果您仍然看到问题,请删除以下行:
addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "x.x.x")
和
addSbtPlugin("org.scala-sbt" % "sbt-core-next" % "x.x.x")
来自您项目中的所有插件引用。这些插件仅支持 Activator UI 并且不为常规构建提供有用的功能。
我正在尝试在 Heroku 上部署一个 Play Framework (Java) 应用程序 (v 2.4),但是当我执行命令时 git push heroku master
我得到以下异常:
remote: [warn] ::::::::::::::::::::::::::::::::::::::::::::::
remote: [warn] :: UNRESOLVED DEPENDENCIES ::
remote: [warn] ::::::::::::::::::::::::::::::::::::::::::::::
remote: [warn] :: com.typesafe.sbtrc#client-2-11;0.3.1: not found
remote: [warn] :: com.typesafe.sbtrc#actor-client-2-11;0.3.1: not found
remote: [warn] ::::::::::::::::::::::::::::::::::::::::::::::
remote: [warn]
remote: [warn] Note: Unresolved dependencies path:
remote: [warn] com.typesafe.sbtrc:client-2-11:0.3.1
remote: [warn] +- com.typesafe.play:fork-run-protocol_2.11:2.4.3 ((play.sbt.forkrun.PlayForkRun) PlayForkRun.scala#L48)
remote: [warn] +- com.typesafe.play:fork-run_2.11:2.4.3 ((play.sbt.forkrun.PlayForkRun) PlayForkRun.scala#L48)
remote: [warn] +- escarbajo:escarbajo_2.11:1.0-SNAPSHOT
remote: [warn] com.typesafe.sbtrc:actor-client-2-11:0.3.1
remote: [warn] +- com.typesafe.play:fork-run_2.11:2.4.3 ((play.sbt.forkrun.PlayForkRun) PlayForkRun.scala#L48)
remote: [warn] +- escarbajo:escarbajo_2.11:1.0-SNAPSHOT
remote: sbt.ResolveException: unresolved dependency: com.typesafe.sbtrc#client-2-11;0.3.1: not found
remote: unresolved dependency: com.typesafe.sbtrc#actor-client-2-11;0.3.1: not found
remote: at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:291)
remote: at sbt.IvyActions$$anonfun$updateEither.apply(IvyActions.scala:188)
remote: at sbt.IvyActions$$anonfun$updateEither.apply(IvyActions.scala:165)
remote: at sbt.IvySbt$Module$$anonfun$withModule.apply(Ivy.scala:155)
remote: at sbt.IvySbt$Module$$anonfun$withModule.apply(Ivy.scala:155)
remote: at sbt.IvySbt$$anonfun$withIvy.apply(Ivy.scala:132)
remote: at sbt.IvySbt.sbt$IvySbt$$action(Ivy.scala:57)
remote: at sbt.IvySbt$$anon.call(Ivy.scala:65)
remote: at xsbt.boot.Locks$GlobalLock.withChannel(Locks.scala:93)
remote: at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries(Locks.scala:78)
remote: at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock.apply(Locks.scala:97)
remote: at xsbt.boot.Using$.withResource(Using.scala:10)
remote: at xsbt.boot.Using$.apply(Using.scala:9)
remote: at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:58)
remote: at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:48)
remote: at xsbt.boot.Locks$.apply0(Locks.scala:31)
remote: at xsbt.boot.Locks$.apply(Locks.scala:28)
remote: at sbt.IvySbt.withDefaultLogger(Ivy.scala:65)
remote: at sbt.IvySbt.withIvy(Ivy.scala:127)
remote: at sbt.IvySbt.withIvy(Ivy.scala:124)
remote: at sbt.IvySbt$Module.withModule(Ivy.scala:155)
remote: at sbt.IvyActions$.updateEither(IvyActions.scala:165)
remote: at sbt.Classpaths$$anonfun$sbt$Classpaths$$work.apply(Defaults.scala:1369)
remote: at sbt.Classpaths$$anonfun$sbt$Classpaths$$work.apply(Defaults.scala:1365)
remote: at sbt.Classpaths$$anonfun$doWork$$anonfun.apply(Defaults.scala:1399)
remote: at sbt.Classpaths$$anonfun$doWork$$anonfun.apply(Defaults.scala:1397)
remote: at sbt.Tracked$$anonfun$lastOutput.apply(Tracked.scala:37)
remote: at sbt.Classpaths$$anonfun$doWork.apply(Defaults.scala:1402)
remote: at sbt.Classpaths$$anonfun$doWork.apply(Defaults.scala:1396)
remote: at sbt.Tracked$$anonfun$inputChanged.apply(Tracked.scala:60)
remote: at sbt.Classpaths$.cachedUpdate(Defaults.scala:1419)
remote: at sbt.Classpaths$$anonfun$updateTask.apply(Defaults.scala:1348)
remote: at sbt.Classpaths$$anonfun$updateTask.apply(Defaults.scala:1310)
remote: at scala.Function1$$anonfun$compose.apply(Function1.scala:47)
remote: at sbt.$tilde$greater$$anonfun$$u2219.apply(TypeFunctions.scala:40)
remote: at sbt.std.Transform$$anon.work(System.scala:63)
remote: at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
remote: at sbt.Execute$$anonfun$submit$$anonfun$apply.apply(Execute.scala:226)
remote: at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
remote: at sbt.Execute.work(Execute.scala:235)
remote: at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
remote: at sbt.Execute$$anonfun$submit.apply(Execute.scala:226)
remote: at sbt.ConcurrentRestrictions$$anon$$anonfun.apply(ConcurrentRestrictions.scala:159)
remote: at sbt.CompletionService$$anon.call(CompletionService.scala:28)
remote: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
remote: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
remote: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
remote: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
remote: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
remote: at java.lang.Thread.run(Thread.java:745)
remote: [error] (*:update) sbt.ResolveException: unresolved dependency: com.typesafe.sbtrc#client-2-11;0.3.1: not found
remote: [error] unresolved dependency: com.typesafe.sbtrc#actor-client-2-11;0.3.1: not found
remote: [error] Total time: 20 s, completed Oct 24, 2015 9:02:27 PM
remote:
remote: ! ERROR: Failed to run sbt!
remote: We're sorry this build is failing. If you can't find the issue in application
remote: code, please submit a ticket so we can help: https://help.heroku.com
remote: You can also try reverting to the previous version of the buildpack by running:
remote: $ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-scala#previous-version
remote:
remote: Thanks,
remote: Heroku
remote:
remote:
remote: ! Push rejected, failed to compile Play 2.x - Java app
remote:
remote: Verifying deploy...
remote:
remote: ! Push rejected to protected-lowlands-4290.
remote:
To https://git.heroku.com/protected-lowlands-4290.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/protected-lowlands-4290.git'
我到处寻找解决方案,发现了一些对其他人有用的东西,但在这种情况下却行不通。我尝试了以下方法:
- 将行
project/play-fork-run.sbt
添加到.gitignore
文件。 - 删除文件
play-fork-run.sbt
. - 将这些解析器添加到
build.stb
文件:解析器 += Resolver.url("Typesafe Ivy", url("<a href="http://repo.typesafe.com/typesafe/ivy-snapshots" rel="nofollow">http://repo.typesafe.com/typesafe/ivy-snapshots</a>"))(Resolver.ivyStylePatterns) 解析器 += "Typesafe" 在“<a href="http://repo.typesafe.com/typesafe/releases/" rel="nofollow">http://repo.typesafe.com/typesafe/releases/</a>”
但似乎没有任何效果,当我在本地主机上编译和 运行 应用程序时,它运行完美。
有解决这个问题的想法吗?
非常感谢任何帮助!
谢谢
这在 localhost 上起作用的原因是您可能 运行 activator
在某些时候将有问题的依赖项下载到本地 .ivy2
缓存。但是在 Heorku 上,只有 sbt
运行s,并且激活器中有一个 major 的错误,很长时间都没有修复,导致之间的解析器不同激活剂和 sbt。
听起来您已经看过这些报告,其中包含一些建议(大部分是您已经尝试过的):
- https://github.com/typesafehub/activator/issues/979
- https://github.com/typesafehub/activator/issues/1058
- https://github.com/typesafehub/activator/issues/1057
- https://github.com/typesafehub/activator/issues/1036
潜在的问题是对此的依赖:
addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "2.4.3")
仔细检查 project/
下的所有 sbt 文件,确保其中没有任何依赖项。在推送到 Heroku 之前,还要确保你的 Git 存储库更改已经提交。
最后,如果您仍然卡住了,您可以切换到使用 sbt-heroku plugin,它使用本地编译的资产并将它们部署到 Heroku。这将一起避免问题。
此外,我建议您在 Play mailing list 上提出这个问题。这是一个长期存在的问题,我遇到过很多人遇到过这个问题。 Typesafe 的工作人员需要听取用户的意见,了解这种情况有多猖獗。
对于 Play 应用,请确保满足以下条件:
- 删除
<project root folder>/project/play-fork-run.sbt
- 删除
<project root folder>/project/sbt-ui.sbt
- 从
<project root folder>/build.sbt
中删除fork in run := true
除非 你 明确想要它。
此外:确保文件 play-fork-run.sbt
和 sbt-ui.sbt
在您的 .gitignore
中并且尚未签入您的项目。
如上所述,如果您仍然看到问题,请删除以下行:
addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "x.x.x")
和
addSbtPlugin("org.scala-sbt" % "sbt-core-next" % "x.x.x")
来自您项目中的所有插件引用。这些插件仅支持 Activator UI 并且不为常规构建提供有用的功能。