【问题标题】:Heroku worker job. How to setup worker process along with play framework webHeroku 工人工作。如何设置工作进程以及播放框架网络
【发布时间】:2013-04-17 13:15:49
【问题描述】:

如果这个问题已经得到解答,我深表歉意;我的搜索没有发现任何人。

我在 Heroku 上部署了一个播放应用程序。我在同一个版本中还有另一个带有 main 方法的 Worker 类。我想以工人而不是网络的身份运行该课程。当我尝试运行它时,它给了我 ClassDefNotFound 异常,这很明显,因为我没有为此进程提供类路径。

如何确定类路径(jar 和类)应该是什么?或者有没有其他方法可以做到这一点?

将该类分开的工作进程的原因是为了使其独立于 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 条目只有需要运行的类“WorkerApplication”的名称,但 Heroku 无法找到这些类文件和其他依赖项。

【问题讨论】:

    标签: heroku playframework procfile


    【解决方案1】:

    您需要在项目中创建多个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 脚本。

    【讨论】:

    • 通过两次使用相同的 ${PORT} 我们不会在端口上发生冲突吗? Heroku 是否使用不同的端口设置运行工作进程?
    • Procfile 的每一行都在自己的测功机(即容器)中运行,具有自己的端口,因此不存在端口冲突。
    • 在我的 Play (2.0.4) 版本中,这是 -Dglobal=...,而不是 -Dapplication.global=... -- 请注意文档不正确:playframework.com/documentation/2.0.4/ScalaGlobal跨度>
    【解决方案2】:

    好的,我想通了。 target/start 是针对 web 而不是 worker。我在 target/stage 文件夹中找到了所有 jar。将工作人员更改为以下工作正常。

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-09
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 2014-03-12
        • 2013-01-15
        • 1970-01-01
        相关资源
        最近更新 更多