[RUBY] [Rails] Traitement par lots régulier à chaque fois

[Rails] Traitement par lots régulier à chaque fois

J'ai implémenté le traitement par lots dans Rails en utilisant Whenever, donc je vais le résumer.

table des matières


Environnement d'exploitation

OS : macOS Mojave 10.14.6 ruby : 2.6.3p62 rails : 5.2.4

Chose que tu veux faire

Je souhaite créer une tâche qui s'exécute régulièrement à une heure fixe

procédure

Installer quand

Gemfile


gem 'whenever', require: false

Effectuer l'installation

Bundle install

Ajouter une lib aux rails

Configurez Rails pour lire le dossier lib Il s'agit de placer les fichiers à traiter par lots dans le dossier lib.

class Application < Rails::Application
  config.autoload_paths += Dir["#{config.root}/lib"]
end

Description du traitement par lots

Créez un dossier appelé batch dans lib, et créez un fichier à exécuter régulièrement. Tout nom peut être utilisé après Batch ::.

Exemple batch/deadline_cleaner.rb

deadline_cleaner


class Batch::DeadlineClear
  def self.deadline_clear
    puts DateTime.now
    puts 'Test'
  end
end

Vérification

$ bundle exec rails runner Batch::DeadlineClear.deadline_clear

Running via Spring preloader in process 77676
test

Créer / modifier schedule.rb

Accédez au dossier racine de votre application et exécutez la commande suivante

$ cd blog-app
$ bundle exec wheneverize .

Une fois exécuté, config / schedule.rb sera créé.

Ensuite, décrivez la planification et la tâche que vous souhaitez exécuter dans schedule.rb comme indiqué ci-dessous.

set :output, 'log/crontab.log'
set :environment, :development

every 1.day, at: '00:00 am' do
  runner 'Batch::DeadlineClear.deadline_clear'
end

Il sera reflété dans CRON avec la commande suivante.

$ bundle exec whenever --update-crontab 

Résultat d'exécution

Vous pouvez voir que le traitement par lots est en fait effectué toutes les minutes.

$ cat log/crontab.log 
Running via Spring preloader in process 78244
2020-05-29T19:50:01+09:00
test
Running via Spring preloader in process 78534
2020-05-29T19:51:01+09:00
test
Running via Spring preloader in process 78598
2020-05-29T19:52:00+09:00
test
Running via Spring preloader in process 78652

Recommended Posts

[Rails] Traitement par lots régulier à chaque fois
^, $ dans l'expression régulière Rails
Résolution d'un affichage HTML étrange en examinant le traitement dynamique de Rails
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
Exécuter des rails à chaque fois dans le docker
Apprenez les expressions régulières petit à petit ①
Récupérateur d'unité fabriqué par traitement
[Docker] À utiliser à tout moment avec Docker + Rails
Rails routage des ressources singulières par ressource
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)