Un cadre pour déclarer des travaux et ainsi effectuer différentes opérations de file d'attente sur le backend. En utilisant Active Job, il est possible d'envoyer du courrier et d'exécuter le traitement par lots en arrière-plan.
Structure de données First In, First Out. Le revers de la pile.
En commençant par un nettoyage régulier, tous les processus tels que la facturation et la livraison du courrier deviennent des tâches. Il est également possible de diviser ces travaux en unités de travail plus petites et de les exécuter en parallèle.
Resque
Delayed Job --DM doit créer une table dédiée.
Sidekiq
$ brew install redis
gem 'resque'
gem 'resque-scheduler'
Exécutez également ceci.
$ bundle install
config/initializers/resque.rb
Resque.redis = Redis.new(host: 'localhost', post: 6379)
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }
lib/tasks/resque.rake
require 'resque/tasks'
require 'resque/scheduler/tasks'
namespace :resque do
task setup: :environment do
ENV['TERM_CHILD'] ||= '1'
ENV['QUEUE'] ||= '*'
require 'resque'
require 'resque-scheduler'
end
end
config/initializers/active_job.rb
ActiveJob::Base.queue_adapter = :resque
--Envoyer du courrier en arrière-plan en utilisant Active Job
$ rails g mailer user_mailer
app/mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default from: "[email protected]"
def registered(user)
mail(to: user.email, subject: 'Welcome to Rdaily!')
end
end
app/views/user_mailer/registered.text.erb
Dear. <%= @user.name %>
Welcome to Rdaily!
$ rails g job user_registered_mailer
app/jobs/user_registered_mailer_job.rb
class UserRegisteredMailerJob < ActiveJob::Base
queue_as :email
def perform(user)
UserMailer.registered(user).deliver_now
end
end
class Account::UsersController < ApplicationController
...
def create
@user = User.new(user_params)
if @user.save
UserRegisteredMailerJob.perform_later(@user)
flash.notice = "User is successfully created."
redirect_to account_path
...
end
gem 'mailcatcher'
Exécutez également ceci.
$ bundle install
config/environments/development.rb
Rails.application.configure do
...
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: 'localhost', port: 1025 }
...
end
$ mailcatcher
#Démarrez le serveur Redis avec la commande suivante
$ redis-server
#Démarrez Resque worker avec la commande suivante
$ bundle exec rake resque:work
#Lancer Resque Scheduler
$ rake environment resque:scheduler
#Démarrer le serveur Rails
$ rails server
Utilisons Active Job introduit dans Rails 4.2
[Rails, Linux] J'ai résumé "Active Job" et "Job"
Recommended Posts