ruby on rails中sidekiq的使用
参考文章:
https://www.jianshu.com/p/7ea473097023
安装redis
- 配置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
- 配置文件
配置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
- 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文件
- sidekiq web可视化(这个步骤是可选的)
ruby on rails中sidekiq的使用的更多相关文章
- 【转】Ruby on Rails中select使用方法
在Ruby on Rails中真的有一堆Select helper可以用,我们经常容易混淆.常见的有三个..select, select_tag, collection_select(其余的什么sel ...
- ruby on rails 中render的
Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...
- Ruby on Rails中的Rake教程(Rake如何把我灌醉!)
下面是我们使用Rake任务的例子: 1.给列表中的用户发送邮件 2.每晚数据的计算和报告 3.过期或重新生成缓存 4.备份数据和svn版本(how's this : subversion reposi ...
- 理解ruby on rails中的ActiveRecord::Relation
ActiveRecord::Relation是rails3中添加的.rails2中的finders, named_scope, with_scope 等用法,在rails3统一为一种Relation用 ...
- ruby on rails 中render的使用
最近写ror,因为比较菜,很多东西不知道,只能看一点查一点了 render 先上点搜集的常用方式 render :action => "long_goal", :layout ...
- json格式在ruby和rails中的注意事项
#虚拟网络拓扑的json数据 def topodata #@vnic = Vnic.all #flash.now[:notice] = 'Message sent!' #flash.now[:aler ...
- Ruby on Rails 中你使用了Kaminari 后,千万不要再引入will_pagination 这个Gem 了
今日做开发的时候发现的这个问题 发现无论怎样配置都不能使用Kaminari 的Per 这个功能,分页大小也固定在了30 最开始还以为是Ransack 这个Gem 影响的,上网搜了很久发现没有 最后仔细 ...
- ruby on rails模拟HTTP请求错误发生:end of file reached
在文章 Ruby On Rails中REST API使用演示样例--基于云平台+云服务打造自己的在线翻译工具 中,利用ruby的Net::HTTP发起http请求訪问IBM Bluemix上的sour ...
- Rails 中的布局和渲染
Templates, Partials, and Layouts 在 Rails 中,视图是用于呈现 HTML.XML.JSON 等响应的模板.Rails 的视图系统支持模板.局部模板和布局模板,它们 ...
- ubuntu 14.04中安装 ruby on rails 环境
环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...
随机推荐
- Python正则表达式提取方法
- C++设计模式 - 解析器模式(Interpreter)
领域规则模式 在特定领域中,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案. 典型模式 Interpreter Interpre ...
- 线上问题分析之java dump文件生成
一.查看java进程 jps or ps aux | grep java 二.生成dump文件 jmap -dump:live,format=b,file=xxxx.bin 进程ID 三.查看dump ...
- 3个.NET开源、免费、强大的商城系统
前言 今天大姚给大家分享3个.NET开源.免费.强大的商城系统,希望可以帮助到有商城系统开发需求的同学. nopCommerce nopCommerce是一个功能丰富.免费.灵活且可定制的开源电子商务 ...
- #环#nssl 1487 图
题目 在一个\(n\)个节点\(n\)条边的连通图中, 每条边的权值为两个端点的权值的和. 已知各边权值,求各点权值 (保证环的大小一定是奇数) 分析 考虑断掉环的某一条边,设根节点的答案为\(ax+ ...
- HTTP协议安全头部的笔记
本文于2016年3月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 近日项目组对当前开发.维护的Web系统做了AppScan扫描,扫描的结 ...
- Unity中国、Cocos为OpenHarmony游戏生态插上腾飞的翅膀
2023年是OpenHarmony游戏生态百花齐放的一年!为了扩展OpenHarmony游戏生态,OpenHarmony在基金会成立了游戏SIG小组,游戏SIG小组联合cocos,从cocos2d ...
- Qt调用系统DLL,判断网络连接状态
*: Win32 网络连接 dll 文件名叫:wininet.dll,位置在 C:\WINDOWS\system32 目录下,将 其拷贝到项目工程下. #include <QLibrary> ...
- MogDB/openGauss中merge的语法解析
MogDB/openGauss 中 merge 的语法解析 近期了解学习了 MogDB/openGauss 中 merge 的使用,merge 语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成 ...
- CentOS 6.3挂载读写NTFS分区(ntfs-3g) [亲测成功]
CentOS 6.3挂载读写NTFS分区(ntfs-3g) CentOS不像Fedora,默认是没有自动挂载NTFS的,而它可以利用NTFS-3G来实现挂载及读写. NTFS-3G 是一个开源的软件, ...