Ruby on rails学习:active_job
如何执行rails的后台任务,用到的工具是 active_job + rescue
加密的 redis 与 rails 连接
Resque.redis = 'redis://username:password@localhost:port'
如果是在 docker 里使用可以用内网ip或者公网ip来访问,参考
Resque.redis = 'redis://username:password@192.168.148.144:port'
第1步:添加 rescue
到 Gemfile 中,并 bundle install
gem 'resque'
第2步:设置默认的 active_job_queue
在这个文件里添加: config/application.rb
# active job queue
config.active_job.queue_adapter = :resque
第3步: Rakefile 中加入对应的 tasks
根目录下的 Rakefile 文件
require 'resque/tasks'
task 'resque:setup' => :environment
第4步:添加 redis 配置
这里实际上省略了一个步骤:
- 你先得安装好
redis
- 添加配置
config/initializers/redis.rb
# Resque.redis = 'redis://username:password@localhost:port'
# 以下是我的配置
Resque.redis = 'redis://default:123456@localhost:6379'
第5步:以 Rake 方式查看
QUEUE=* rake resque:work
第6步:添加自己的job
rails g job TrendStat
class TrendStatJob < ApplicationJob
queue_as :default
def perform
Trend.stat
Rails.logger.info("Trend stat update.")
end
end
其实你还可以用web方式查看
require 'resque/server'
mount Resque::Server, at: '/jobs'
#or if you would like to protect this with Devise
devise_for :users
authenticate :user do
mount Resque::Server, at: '/jobs'
end
参考
- https://github.com/resque/resque/wiki/ActiveJob
- https://www.youtube.com/watch?v=5Z21WARO7P8
- https://ruby-china.github.io/rails-guides/active_job_basics.html
- https://github.com/resque/resque/issues/1564
- https://github.com/resque/resque-scheduler
- https://stackoverflow.com/questions/47266758/rails-redis-rediscommanderror-noauth-authentication-required
- https://github.com/afeiship/docker-redis