我正在开发一个ruby& rails应用程序,其中要求如下:在接收HTTP请求时,控制器必须将数据存储在数据库中并将成功返回给最终用户。此时,我想要一个后台线程来唤醒并对添加的数据执行操作。我在开发模式下使用WEBRick服务器。如何实现这一功能?
答案 0 :(得分:0)
由于您正在寻找后台处理库,很多人会推荐resque和sidekiq。你可以查看at this sitepoint tutorial一篇比较延迟工作与其他两篇文章的好文章(我不知道那里有人如此评论)你可以看到这两者的良好比较in this stack overflow answer
要考虑的一个主要问题是,您希望在后台进程中运行的代码是否是安全的?如果它不坚持resque(我认为它更简单,意见问题)因为sidekiq运行并行工作(我确定你可以选择不这样做)。
示例代码:Redis(来自docs):
定义一些工作,找一份工作。乔布斯需要一种工作方法:
class ImageConversionJob
def work
# convert some kind of image here
end
end
接下来,我们需要拖延!让我们把你的工作放在队列上:
resque = Resque.new
resque << ImageConversionJob.new
纯!这个工作单元将存储在Redis中。我们可以启动一个工作人员从队列中获取一些工作并完成工作:
bin/resque work
Sidekiq(来自链接的sitepoint文章):
class PrintWorker
include Sidekiq::Worker
def perform(str)
puts str
end
end
再一次,我们必须在某个地方排队工作(我们将在索引控制器中完成):
class IndexController < ApplicationController
def index
PrintWorker.perform_async(params[:to_print])
end
end
最后,我们必须启动Sidekiq流程。在Rails应用程序的根目录中将其键入shell:
bundle exec sidekiq
这只是一个快速的纲要和足够的语法来获得答案的味道。有关更多详细信息,请参阅链接的文章。