Heroku工作者。如何设置工作流程以及播放框架Web

时间:2013-04-17 13:15:49

标签: heroku playframework procfile

如果已经回答,我道歉;我的搜索没有透露任何一个。

我在Heroku上部署了一个播放应用程序。我在同一个版本中还有另一个带有main方法的Worker类。我希望将该类作为工作者而不是Web来运行。当我尝试运行它时,它给了我ClassDefNotFound异常,这很明显,因为我没有为这个过程提供类路径。

我如何弄清楚应该是什么类路径(罐子和类)?或者还有其他方法吗?

将该类与单独的工作进程放在一起的原因是将其扩展为独立于Web应用程序。

这里有更多细节。我的Procfile有以下条目,

web: target/start -Dhttp.port=$PORT -DapplyEvolutions.default=true -DapplyDownEvolutions.default=true -Ddb.default.url=$DATABASE_URL ${JAVA_OPTS}
worker: target/start com/company/test/worker/WorkerApplication ${JAVA_OPTS}

worker entry只有“WorkerApplication”类的名称需要运行,但Heroku无法找到这些类文件和其他依赖项。

3 个答案:

答案 0 :(得分:3)

您需要在项目中创建多个Global objects,每个入口点都有不同的名称。然后在Procfile中,指定从application.global属性开始的属性,如下所示:

web:     target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -Dapplication.global=Web
worker:  target/start -Dhttp.port=${PORT} ${JAVA_OPTS} -Dapplication.global=Worker

我没有尝试使用Play项目,但您也可以使用sbt-start-script plugin来使用正确的类路径创建自定义target/start脚本。

答案 1 :(得分:2)

好的,我明白了。 target / start适用于web而不适用于worker。我在target / stage文件夹中找到了所有的jar。将工人改为跟随工作正常。

worker:java -cp“target / staged / *”com / company / test / worker / WorkerApplication

答案 2 :(得分:0)

我们最近为Heroku上的Playframework开放了我们的延迟工作框架Moonlight

延迟的工作通常需要某种协调。例如,您可能需要一个队列,以便工作人员可以从队列中获取作业并对其进行处理。 Moonlight为您处理。

对于您关于Procfile的特定问题,我们在这里有一个有效的示例:https://github.com/GIVESocialMovement/moonlight/blob/master/test-project/Procfile

您的类路径不应包含/,我认为您需要参数-main