2013-02-18 32 views
1

我可以在Web服务器内部运行delayed_job或类似的调度框架,例如:瘦或独角兽? 如果是,我该如何启动它? (代码示例将非常酷!)在主Web进程中运行delayed_job

原因是我想省钱在我的应用程序只是在一个建立阶段,它托管在heroku上。

回答

3

正式

没有,没有支撑delayed_jobs异步Web框架内运行方式。从运行作业上的documentation开始,它看起来像是唯一支持运行作业的方式是运行rake任务或延迟的作业脚本。另外,弯曲Rack服务器似乎在概念上是错误的,该服务器旨在处理传入的客户端请求,以支持将任务从某个队列中拉出。

的未完善

这么说,我明白,有时候,省钱胜过在概念完美。看看these rake tasks。我的错误是在你的Rails服务器上创建一个特殊的端点,你定期从某个远程位置点击。在此端点内部,实例化一个Delayed::Worker并使用exit_on_complete选项对其调用.start。这样,你不需要一个新的测试仪或命令。

被警告,这是一种轻松的解决方案,它将绑定您的一个rails进程,直到所有延迟的作业完成。这意味着除非您有其他的Rails进程,否则所有传入的请求都会阻塞,直到完成这个队列请求。独角兽提供工具来产生工作流程。这个解决方案是否可以工作还取决于你的工作,他们需要多长时间运行以及你的应用程序的延迟容限。

编辑

随着spawn宝石,你可以用一个spawn块,这将导致你的工作在一个单独的进程中运行包你的Delayed::Worker的实例。这意味着您的Rails进程将可用于立即提供Web请求,而不是在延迟作业运行时阻塞。然而,产卵宝石有一些依赖于ActiveRecord,我不知道你使用的是什么DB/ORM。

下面是一些示例代码,因为它变得有点朦胧:

class JobsController < ApplicationController 
    def run 
    spawn do 
     @options = {} # youll have to get these from that rake file 
     Delayed::Worker.new(@options.merge(exit_on_complete: true)).start 
    end 
    end 
end 
+0

很好解释,谢谢。如果我创建了我的代码的守护进程,会阻止我的线程/工作? https://github.com/ghazel/daemons – SeriousM 2013-02-18 17:39:40

+0

我认为守护进程插件是一种将脚本与其中的循环转换为可以在后台运行并且可以从命令行进行控制的方式(即,您可以调用'stop'来停止后台进程)。我会建议寻找[产卵](https://github.com/tra/spawn)。 – 2013-02-18 17:44:50

+0

有趣!有了这个,我可以产生一个新的线程,运行我的进程(也可能在一个新的线程)并重新开始?听起来不错!顺便说一句:我不会这么做太久。我只需要知道该项目在我花了一些钱之前是否有意义。 – SeriousM 2013-02-18 17:47:53

1

下面是一个类似的问题的链接:记住

Is it feasible to run multiple processeses on a Heroku dyno?

熊,作为后说,如果你只使用一个网络测功机,它会被关闭,如果没有交通去到它。

与此类似,您可能会考虑:

http://blog.codeship.io/2012/05/06/Unicorn-on-Heroku.html

为了节省需要多个网络DYNOS,而你正在构建你的应用程序(虽然它仍然受到上述关机问题) 。

我建议你可以看看直接在VPS运行,而不是Heroku的(退房railscast):

http://railscasts.com/episodes/337-capistrano-recipes

一旦成立,这是很容易部署到。 Heroku为你削减了devops部分。

+0

感谢您的,但我有一个分析器NewRelic的运行,保持我的测功机联机。顺便说一句,你的回答并没有真正回答我的问题,如果我可以在Web过程中运行delayed_job(奖金和方式)。你能帮我一下吗? – SeriousM 2013-02-18 16:57:48

+0

如果可以的话,第一个链接的答案是(是!),但我不想(在内存和CPU上,这些dynos真的非常受限制)。我会为多个独角兽工作人员节省开支(取决于您的应用程序的大小,可以提供2-4个并发请求),从而为您提供资金以获得工作人员动态。 – Tom 2013-02-18 17:12:49

+0

我正在使用独角兽,但也想免费获得工作人员:)。我如何在独角兽内部启动一个进程/线程? – SeriousM 2013-02-18 17:15:48