我有一个用于Rails应用程序的N dynos,我想对所有这些应用程序运行命令。有办法吗?是否会在所有dynos上执行rails r "SomeRubyCode"
?
我正在使用一个插件,它每M分钟与第三方同步。问题是,有时第三方服务超时,我想再次运行它而不必等待另一个M分钟通过。
答案 0 :(得分:9)
没有。一个关闭命令(像heroku run bash
这样的命令)在另一个一次性dyno上运行。你需要设置一些所有dynos听到的pubsub / message队列来完成这个任务。 https://devcenter.heroku.com/articles/one-off-dynos
答案 1 :(得分:4)
(要求将我的评论转化为答案......将借此机会阐述。)
我不知道你的插件需要做什么来“同步”到第三方服务的细节,但我将继续假设插件基本上获取了一些你的网络的瞬态数据应用程序然后以某种方式使用。
由于同步或获取过程偶尔会失败,并且您的Web应用程序依赖于最新数据,因此您需要手动运行“同步”过程。目前,唯一的方法是从插件本身执行此操作,这意味着您需要在所有dynos上运行一些代码,正如其他人所指出的那样,目前无法实现。
我在之前的类似场景中做过的事情(从外部服务获取分析)很简单:
然后我进一步使用Heroku简单调度程序每隔 n 分钟执行所述rake任务,以尝试保持数据新更新并始终在缓存中(缓存到期时间设置为略小于 n 分钟)并在发生数据提取时减少可感知滞后的实例。我可以将缓存过期设置为从不或大于 n ,但这不是关键任务。
这样,如果我 想要确保显示最新的分析,我所要做的就是a)连接到Redis并从缓存中删除该项,或者(更简单), b)只是heroku run rake task
。
再次 - 如果您只是提取需要在所有dynos之间共享的数据,这主要有效。
这显然不起作用。例如,如果您有一个集中服务,您希望在每个dyno基础上定期发送指标(例如,每个请求花费的时间)。想不出一个简单,优雅的方法来使用Heroku(除了实时,除了所需的所有开销)。