[Rails] À propos d'ActiveJob,!

Qu'est-ce qu'ActiveJob?

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.

Contexte de l'emploi actif

queue

Structure de données First In, First Out. Le revers de la pile.

emploi

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.

Objectif du travail actif

Resque

Delayed Job --DM doit créer une table dédiée.

Sidekiq

Procédure d'installation d'ActiveJob

  1. Exécutez la commande suivante pour installer.

$ brew install redis
  1. Ajoutez ce qui suit au Gemfile.

gem 'resque'
gem 'resque-scheduler'

Exécutez également ceci.


$ bundle install
  1. Ajoutez le fichier d'initialisation et la tâche de râteau.

config/initializers/resque.rb



Resque.redis = Redis.new(host: 'localhost', post: 6379)
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }
  1. Créez un fichier de paramètres de demande avec le contenu suivant.

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
  1. Créez le fichier d'initialisation suivant et spécifiez Resque comme queue_adapter.

config/initializers/active_job.rb



ActiveJob::Base.queue_adapter = :resque

Exemple d'utilisation réelle

--Envoyer du courrier en arrière-plan en utilisant Active Job

  1. Créez un UserMailer avec la commande suivante.

$ rails g mailer user_mailer
  1. Ajoutez des méthodes et des vues pour la soumission.

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!
  1. Créez un travail avec la commande suivante

$ rails g job user_registered_mailer
  1. Modifiez le fichier créé comme suit.

app/jobs/user_registered_mailer_job.rb



class UserRegisteredMailerJob < ActiveJob::Base
  queue_as :email

  def perform(user)
    UserMailer.registered(user).deliver_now
  end
end
  1. Pour utiliser le travail créé, créez une instance du travail sur le contrôleur comme indiqué ci-dessous, spécifiez le temps d'attente et appelez la méthode #perform_later.

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
  1. Ajoutez ce qui suit au Gemfile.

gem 'mailcatcher'

Exécutez également ceci.


$ bundle install
  1. Écrivez ce qui suit dans le fichier de paramètres d'environnement.

config/environments/development.rb



Rails.application.configure do
  ...
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = { address: 'localhost', port: 1025 }
  ...
end
  1. Démarrez mailcatcher avec la commande suivante.

$ mailcatcher
  1. Démarrez divers serveurs.

#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

référence

Utilisons Active Job introduit dans Rails 4.2

[Rails, Linux] J'ai résumé "Active Job" et "Job"

Recommended Posts

[Rails] À propos d'ActiveJob,!
À propos des rails 6
À propos du routage des rails
À propos du contrôleur Rails
[Rails] À propos des fichiers de migration
[Rails] À propos du hachage actif
À propos de la spécification de version des rails
[rails] concevoir les valeurs par défaut
rails Paramètres forts
[Débutant] À propos de la session Rails
A propos de l'attribution d'un nom aux méthodes de modèle Rails
[Rails] À propos de la structure des dossiers scss
À propos =
[Rails] À propos du test de réponse Rspec
À propos de la méthode de raclage des rails Mechanize
À propos du symbole <%%> dans Rails erb
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] À propos de la méthode d'assistance form_with [Basic]
Considération sur les rails et l'architecture propre
[Rails g. Erreur]
À propos de Kotlin
À propos de attr_accessor
Notions de base sur les rails
Rails Examen 1
À propos de Hinemos
[Rails] first_or_initialize
rails tutry
À propos du printemps ③
À propos d'énumération
[Rails 6.0] À propos de la sauvegarde par lots de plusieurs enregistrements
Fondation Rails
À propos facultatif
À propos du hachage
À propos de JitPack
tutoriel sur les rails
rails tutry
tutoriel sur les rails
À propos de ça ()
À propos de l'encapsulation
À propos de JAVA_HOME
[Ruby on Rails] À propos du rappel Active Record
À propos des exceptions
[Rails] concevoir
rails tutry
tutoriel sur les rails