推荐运行单服务器定时播放的方式!heroku的乔布斯?

推荐运行单服务器定时播放的方式!heroku的乔布斯?,heroku,playframework,Heroku,Playframework,有没有办法让计划作业在单个服务器上运行?我们有一个电子邮件发送作业,我不想同时运行两次。这就是heroku工人的目的吗?我现在的印象是玩!作业实际上是在网络工作者身上运行的。谢谢 我们一直在使用Play!(不在Heroku上)并发现最简单的方法是为要运行作业的服务器定义一个框架id,为不运行作业的服务器定义一个框架id 在我们的例子中,“prodapp”是不运行作业的生产应用程序服务器,“prodadmin”是生产管理/作业服务器(只有一个) 我们在application.conf中包含以下内容

有没有办法让计划作业在单个服务器上运行?我们有一个电子邮件发送作业,我不想同时运行两次。这就是heroku工人的目的吗?我现在的印象是玩!作业实际上是在网络工作者身上运行的。谢谢

我们一直在使用Play!(不在Heroku上)并发现最简单的方法是为要运行作业的服务器定义一个框架id,为不运行作业的服务器定义一个框架id

在我们的例子中,“prodapp”是不运行作业的生产应用程序服务器,“prodadmin”是生产管理/作业服务器(只有一个)

我们在application.conf中包含以下内容,以禁用prodapp服务器上的作业插件:

%prodapp.plugins.disable=play.jobs.JobsPlugin


我不确定这是否是最好的解决方案,但在调查了其他一些选项后,我们确定这是最快的实现方案,而不会造成混乱!源代码。

我向Heroku发送了一份支持票证,用于相同的查询。他们建议不要使用Play scheduled jobs,而是使用Scheduler插件


我不认为您可以在Heroku中指定服务器id,因此您无法区分一个web服务器和另一个web服务器,因此,如果您能够控制正在运行的服务器数量,您就不能像控制任务一样只使用一个实例

我认为下面两个答案的某种组合会起作用。您可以使用Heroku上的Worker(让进程全天候运行),也可以使用Scheduler插件安排播放以特定间隔开始(与@OnApplicationStart结合使用)。对于Worker,您需要一个使用不同框架id的自定义Procfile。例如:web:play run--http.port=$port$play_OPTS foo:play run--%foo(这是两行独立的代码。很抱歉,格式在注释中不起作用。)此外,下面是一些可能有用的线程:谢谢Jordan,这是我们在访问heroku之前一直采用的方法,但我们无法为web dynos指定服务器id。看起来我们需要使用另一个答案中提到的调度器插件。