参考文章:

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. KingbaseES Json 系列十:Json数组构造函数

    KingbaseES Json 系列十--Json数组构造函数(ARRAY_TO_JSON,JSONB_BUILD_ARRAY,JSON_ARRAY,JSON_BUILD_ARRAY) JSON 数据 ...

  2. ET介绍——数值组件设计

    类似魔兽世界,moba这种技能极其复杂,灵活性要求极高的技能系统,必须需要一套及其灵活的数值结构来搭配.数值结构设计好了,实现技能系统就会非常简单,否则就是一场灾难.比如魔兽世界,一个人物的数值属性非 ...

  3. Go 中的格式化字符串`fmt.Sprintf()` 和 `fmt.Printf()`

    在 Go 中,可以使用 fmt.Sprintf() 和 fmt.Printf() 函数来格式化字符串,这两个函数类似于 C 语言中的 scanf 和 printf 函数. fmt.Sprintf() ...

  4. MindSpore编译构建后Vmap模块的RuntimeError问题

    技术背景 这篇文章来源于MindSpore仓库中的一个Issue,简单描述问题就是,如果你用MindSpore开发了一个python软件供别人使用,那么很有可能涉及到编译构建的问题.但是如果直接使用编 ...

  5. 重新整理数据结构与算法(c#)—— 顺序存储二叉树[十九]

    前言 二叉树顺序存bai储是二叉树的一种存储方式.将二du叉树存储在一zhi个数组中,通过存储元素的下dao标反映元素之间的父子关系. 正文 这个概念比较简单,比如一个节点的在数组的index是x,那 ...

  6. 01矩阵-【BFS】

    01矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离.两个相邻元素间的距离为 1 ,方格斜方向不计算距离. 示例 1: 输入: [0 0 0 0 1 0 0 0 0] 输出: ...

  7. 英文A+B

    A+B 题目描述 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A ...

  8. JavaScript中如何实现函数缓存?有哪些应用场景?

    一.是什么 函数缓存,就是将函数运算过的结果进行缓存 本质上就是用空间(缓存存储)换时间(计算过程) 常用于缓存数据计算结果和缓存对象 const add = (a,b) => a+b;cons ...

  9. vue-cli-service 不是内部或者外部命令

    原因一. 新拉取的项目没有执行 npm install,找不到相关的依赖包(也就是说没有node_modules文件夹). 解决方法: 执行下 npm install 即可 原因二. 项目的依赖包损坏 ...

  10. sql多表分页查询【oracle】

    sql多表查询[oracle] 做个记录,好歹是写出来了,使用左连接的方法,进行四表查询,且使用rownum进行分页 把涉及内容的全部替换了,不过应该都看得懂,就不说了 select * from ( ...