Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
播放2.2.2/仅在一个Heroku';s dyno:_Heroku_Playframework 2.0_Playframework 2.2 - Fatal编程技术网

播放2.2.2/仅在一个Heroku';s dyno:

播放2.2.2/仅在一个Heroku';s dyno:,heroku,playframework-2.0,playframework-2.2,Heroku,Playframework 2.0,Playframework 2.2,我拥有一个Play 2.2.2应用程序 实际上部署在Heroku上,我有以下配置: $heroku ps === web (1X): `target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT}` web.1: up 2014/03/05 03:53:05 (~ 9h ago) web.2: up 2014/03/05 04:10:03 (~ 9h ago) 因此,我拥有2个web

我拥有一个Play 2.2.2应用程序

实际上部署在Heroku上,我有以下配置:

$heroku ps 

=== web (1X): `target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf  -Dhttp.port=${PORT}`
web.1: up 2014/03/05 03:53:05 (~ 9h ago)
web.2: up 2014/03/05 04:10:03 (~ 9h ago)
因此,我拥有2个web Dyno,每个都运行我的Play应用程序的一个实例

现在我想在
Global.scala
中只在一个dyno上启动一个特定的Akka调度程序。 只有一个,因为它将重点轮询数据库中的
EventStore
,其升序非常重要

似乎可以使用命令选项
-Dapplication.Global=Global2.scala
使用特定的
Global.scala
指定特定实例 这太好了,因为我可以创建一个运行调度程序的
Global2.scala
,同时让
Global.scala
不被任何其他动态对象触及和使用

添加调度程序时,ProcFile应该如何指定dyno?

目前我有:

web: target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf  -Dhttp.port=${PORT}
我遇到了这个问题,但答案中给出的程序对我来说不是很清楚

如果是:

web: target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT}
singleton: `target/universal/stage/bin/myWebApp -Dconfig.resource=prod.conf -Dhttp.port=${PORT} -Dapplication.global=Global2.scala`
以及制作:

heroku ps:scale singleton=1
缺点是在处理用户HTTP请求时会丢失一个dyno。
事实上,各国:

web进程类型是特殊的,因为它是唯一 将从Heroku的路由器接收HTTP流量。其他工艺类型 可以任意命名


有人能给我一个提示吗?

您可以在运行时获得dyno名称:

String dyno = System.getenv("DYNO");
因此,在您的代码中,您可以通过检查dyno变量来运行Akka调度程序:

if(dyno.equals("web.1")) {
       Akka.system().scheduler().scheduleOnce(
                Duration.Zero(),
                new Runnable() {
                    public void run() {
                    // do something
                    }
                },
                Akka.system().dispatcher()
        );
}
但是,如果“web.1”宕机了,我需要一个新的dyno来执行这个过程,那么这种硬编码的方式就不合适了,不是吗?