Ein Framework zum Deklarieren von Jobs und damit zum Ausführen verschiedener Warteschlangenoperationen im Backend. Mit Active Job ist es möglich, E-Mails zu senden und die Stapelverarbeitung im Hintergrund auszuführen.
First-In-First-Out-Datenstruktur. Die Rückseite des Stapels.
Zu den Jobs gehören regelmäßige Bereinigungen, Rechnungsstellung und E-Mail-Zustellung. Es ist auch möglich, diese Jobs in kleinere Arbeitseinheiten aufzuteilen und parallel auszuführen.
Resque
Delayed Job --DM muss eine dedizierte Tabelle erstellen.
Sidekiq --Resque kompatible API.
$ brew install redis
gem 'resque'
gem 'resque-scheduler'
Führen Sie dies auch aus.
$ 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
$ 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'
Führen Sie dies auch aus.
$ 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
#Starten Sie den Redis-Server mit dem folgenden Befehl
$ redis-server
#Starten Sie Resque Worker mit dem folgenden Befehl
$ bundle exec rake resque:work
#Starten Sie den Resque Scheduler
$ rake environment resque:scheduler
#Starten Sie den Rails-Server
$ rails server
Verwenden wir den in Rails 4.2 eingeführten aktiven Job
[Rails, Linux] Ich habe "Active Job" und "Job" zusammengefasst
Recommended Posts