参考文章:

https://www.jianshu.com/p/7ea473097023

安装redis

  1. 配置redis

配置sidekiq所依赖的redis位置,必须同时定义sidekiq的server和client

config/initializers/sidekiq.rb

# 这里的地址和端口号(1643)都需要配置成正确的
Sidekiq.configure_server do |config|
config.redis = { url: 'redis://redis.wdxtub.com:1643/12' } #标准格式 config.redis = { url: "redis://#{redis_server}:#{redis_port}/#{redis_db_num}", namespace: redis_namespace }
end
Sidekiq.configure_client do |config|
config.redis = { url: 'redis://redis.wdxtub.com:1643/12' } #标准格式 config.redis = { url: "redis://#{redis_server}:#{redis_port}/#{redis_db_num}", namespace: redis_namespace }
end

如果要使用 UNIX socket,URL 应该类似于 unix://#{Rails.root}/tmp/sockets/redis.sock

  1. 配置文件

配置config/sidekiq.yml文件,一般只有在需要配置高级选项的时候才需要配置这个文件(如果不使用这个名字,可以使用-c指定 sidekiq -c config/name.yml)

:verbose: false
:concurrency: 5 # 并发数
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log # 输出的日志地址
:timeout: 30
:queues:
- default # 写在队列参数中的, 表示让 sidekiq 处理这个 queue
- [HardWorker, 2] # 使用数组的形式写, 第一个参数为打开的 queue 的名称, 第二个为优先级
- [EmailWorker, 3]
- [PasswordWorker, 4] development:
:concurrency: 5
staging:
:concurrency: 10
production:
:concurrency: 5
  1. gemfile中添加对应的包

    gem 'sidekiq', '4.0.1', :require => false

执行bundle install

在app/jobs文件下新建一个job,来处理异步请求(可以使用命令也可以手动创建)

rails g job add_lots_of_users
#rails g sidekiq:worker Hard # will create app/workers/add_lots_of_users_job.rb #在app/workers文件下新建一个worker,来处理异步请求(可以使用命令也可以手动创建)

app/workers/add_lots_of_users_job.rb

注意:下面的类名AddLotsOfUsersJob要和上面的文件名一致

文件中会生成如下内容

例子1 继承< ActiveJob::Base

class AddLotsOfUsersJob < ActiveJob::Base
queue_as :default def perform(*args)
# Do something later
sleep 10
1000.times do |index|
user = User.new
user.name = "atpking#{index}"
user.save
end
end
end #class HardWorker
#include Sidekiq::Worker
#def perform(name, count)
# do something
#end
#end

例子2 不继承< ActiveJob::Base 可以不在rails使用

class AddLotsOfUsersJob
include Sidekiq::Worker
sidekiq_options :queue => :update_is_scan_state, :retry => 3, :backtrace => true
def perform(*args)
# Do something later
sleep 10
1000.times do |index|
user = User.new
user.name = "atpking#{index}"
user.save
end
end
end

在需要的地方controller或者model中调用,调用示例如下

# 如果AddLotsOfUsersJob任务类继承ActiveJob::Base 例如:class AddLotsOfUsersJob < ActiveJob::Base
#注意:perform是一个实例方法,但是在调用的时候是用类调用
AddLotsOfUsersJob.perform_later #常规异步执行
AddLotsOfUsersJob.set( wait: 20.minutes ).perform_later #指定延迟多久执行
@users = User.all # 如果AddLotsOfUsersJob任务类不继承ActiveJob::Base 例如:class AddLotsOfUsersJob
#HardWorker.perform_async('bob', 5) #常规异步执行
#HardWorker.perform_in(5.minutes, 'bob', 5) #延迟执行
#User.delay.do_some_stuff(current_user.id, 20) # 也可以通过 delay 来新建任务

在config/application.rb中指定active_job的adapter

adapter默认使用的adapter是Active Job Inline需要指定为sidekiq才支持异步(如果是使用worker这一步可以省略)

config.active_job.queue_adapter = :sidekiq

在rails项目的根目录启动sidekiq

bundle exec sidekiq -d -C config/sidekiq.yml #-d是指后台运行 -c指定配置文件,默认sidekiq.yml文件

  1. sidekiq web可视化(这个步骤是可选的)

ruby on rails中sidekiq的使用的更多相关文章

  1. 【转】Ruby on Rails中select使用方法

    在Ruby on Rails中真的有一堆Select helper可以用,我们经常容易混淆.常见的有三个..select, select_tag, collection_select(其余的什么sel ...

  2. ruby on rails 中render的

    Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...

  3. Ruby on Rails中的Rake教程(Rake如何把我灌醉!)

    下面是我们使用Rake任务的例子: 1.给列表中的用户发送邮件 2.每晚数据的计算和报告 3.过期或重新生成缓存 4.备份数据和svn版本(how's this : subversion reposi ...

  4. 理解ruby on rails中的ActiveRecord::Relation

    ActiveRecord::Relation是rails3中添加的.rails2中的finders, named_scope, with_scope 等用法,在rails3统一为一种Relation用 ...

  5. ruby on rails 中render的使用

    最近写ror,因为比较菜,很多东西不知道,只能看一点查一点了 render 先上点搜集的常用方式 render :action => "long_goal", :layout ...

  6. json格式在ruby和rails中的注意事项

    #虚拟网络拓扑的json数据 def topodata #@vnic = Vnic.all #flash.now[:notice] = 'Message sent!' #flash.now[:aler ...

  7. Ruby on Rails 中你使用了Kaminari 后,千万不要再引入will_pagination 这个Gem 了

    今日做开发的时候发现的这个问题 发现无论怎样配置都不能使用Kaminari 的Per 这个功能,分页大小也固定在了30 最开始还以为是Ransack 这个Gem 影响的,上网搜了很久发现没有 最后仔细 ...

  8. ruby on rails模拟HTTP请求错误发生:end of file reached

    在文章 Ruby On Rails中REST API使用演示样例--基于云平台+云服务打造自己的在线翻译工具 中,利用ruby的Net::HTTP发起http请求訪问IBM Bluemix上的sour ...

  9. Rails 中的布局和渲染

    Templates, Partials, and Layouts 在 Rails 中,视图是用于呈现 HTML.XML.JSON 等响应的模板.Rails 的视图系统支持模板.局部模板和布局模板,它们 ...

  10. ubuntu 14.04中安装 ruby on rails 环境

    环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...

随机推荐

  1. Python爬取腾讯疫情实时数据并存储到mysql数据库

    思路: 在腾讯疫情数据网站F12解析网站结构,使用Python爬取当日疫情数据和历史疫情数据,分别存储到details和history两个mysql表. ①此方法用于爬取每日详细疫情数据 1 impo ...

  2. #分治 or 线段树+单调栈#CF526F Pudding Monsters

    题目 给定一个 \(n \times n\) 的棋盘,其中有 \(n\) 个棋子,每行每列恰好有一个棋子. 求有多少个 \(k \times k\) 的子棋盘中恰好有 \(k\) 个棋子. 分析 先将 ...

  3. c# 托管和非托管资源-详解

    前言 引用:带你复习c# 托管和非托管资源_C#教程_脚本之家 (jb51.net) c# 托管和非托管比较重要,因为这涉及到资源的释放. 现在只要在计算机上运行的,无论玩出什么花来,整个什么概念,逃 ...

  4. C#-GroupBox包含控件,如何获取这些控件的名称

    您可以使用 Enumerable.OfType在GroupBox中查找和投射您的RadioButtons: var radioButtons = groupBox1.Controls.OfType&l ...

  5. HMS Core Discovery第15期直播预告|构筑立体世界,共造沉浸式营销

    [导读] AR技术,是一种将真实世界信息和虚拟世界信息"无缝"衔接的技术,现如今AR技术受到日益广泛的关注,在我们生活中发挥着重要的作用,并显示出巨大的潜力--它是如何改变我们观察 ...

  6. org.xml.sax.SAXParseException; lineNumber: 11;

    org.xml.sax.SAXParseException; lineNumber: 11; 点击clean  然后再启动

  7. SpringBoot+阿里云OCR图片识别

    准备条件:阿里云OCR图片识别API购买,初次购买1分钱500次接口调用 一.控制层 @GetMapping("/uploadManual") @ApiOperation(&quo ...

  8. HarmonyOS崩溃服务能力全新上线,帮你高效解决崩溃问题!

    原文:https://mp.weixin.qq.com/s/YmYzNXsvsqt8U8JX3vlmrg,点击链接查看更多技术内容. 一.为什么需要崩溃服务能力 用户在使用原子化服务时,出现卡顿.缓慢 ...

  9. 基于 Scriptable 从零开始美化iOS桌面(一)

    今天我为大家带来新的作品,iOS17桌面组件神器(Scriptable)原创脚本,精美作品分享!喜欢的话就点关注吧!更多脚本正在路上... * script : ONE-Progress.js * v ...

  10. python3 引入requests报错ImportError的处理方案

    执行python3 import requests时抛出错误:ImportError: No module named requests 使用python3写爬虫时,有些小伙伴会遇到这种坑,使用发现导 ...