我有一个Rails应用程序的N个dynos,并且我想对它们运行一个命令。有没有办法做到这一点?在所有的dynos上执行rails r "SomeRubyCode"
会执行吗?有没有办法在所有Heroku dynos上运行命令?
我正在使用一个插件,每M分钟与第三方同步。问题是,有时第三方服务会超时,我想再次运行它,而不必等待另外的M分钟。
我有一个Rails应用程序的N个dynos,并且我想对它们运行一个命令。有没有办法做到这一点?在所有的dynos上执行rails r "SomeRubyCode"
会执行吗?有没有办法在所有Heroku dynos上运行命令?
我正在使用一个插件,每M分钟与第三方同步。问题是,有时第三方服务会超时,我想再次运行它,而不必等待另外的M分钟。
No. One off命令(如heroku run bash
)在另一个一次性测功机上运行。你需要设置一些pubsub /消息队列,所有的dynos都可以听到这个消息来完成这个任务。 https://devcenter.heroku.com/articles/one-off-dynos
(问把我的意见变成一个答案......将借此机会阐述。)
我不知道你的插件,需要做的,“同步”到一个什么样的细节第三方服务,但我将继续假设插件基本上获取Web应用程序以某种方式使用的一些临时数据。
由于同步或读取过程偶尔会失败,并且您的Web应用程序依赖最新的数据,因此您需要手动运行“同步”过程的选项。目前,只有这样才能从插件本身做到这一点,这意味着您需要在所有的dynos上运行一些代码,正如其他人所指出的那样,目前不可能。
我在以前,类似的情况做了什么(从外部服务获取分析)很简单:
然后我进一步去和使用Heroku的简单的调度,以执行所述搜索任务每ň分钟试图保持数据新鲜更新,并始终处于高速缓存(缓存过期设置为略小于ñ分钟),并减少发生数据获取时可感知滞后的情况。我可以将缓存过期设置为从不或大于n但这不是关键任务。
这样,如果我没有要确保被显示的最新分析,我不得不这样做要么是一个)连接到Redis的和从缓存中,或删除的项目(容易),B)只是heroku run rake task
。
再说一遍 - 如果你只是拉取需要在所有dynos之间共享的数据,这主要起作用。
这显然不能反其道而行。例如,如果您有一个集中式服务,您希望定期发送指标(比如说,每个请求花费的时间)以逐个测试者为基础。想不到使用Heroku的简单而优雅的方式(除了实时,还有所有需要的开销)。
您的用例描述在这里最有用。 – hgmnz 2013-02-15 19:30:24
我正在使用每N分钟与第三方同步的插件。问题是,有时第三方服务会超时,我想再次运行它,而不必等待另外N分钟的时间。 – Geo 2013-02-15 19:51:15
如何使用Redis作为共享/分布式内存(在应用程序级而不是插件级)?有一个计划的rake任务“强制”插件同步并将结果存储在缓存中,然后让应用的其余部分从缓存中获取数据。如果同步失败,您可以手动运行rake任务,而不用担心运行哪个dyno。 – 2013-02-18 02:29:05