J'ai implémenté le traitement par lots dans Rails en utilisant Whenever, donc je vais le résumer.
OS : macOS Mojave 10.14.6
ruby : 2.6.3p62
rails : 5.2.4
Je souhaite créer une tâche qui s'exécute régulièrement à une heure fixe
Gemfile
gem 'whenever', require: false
Effectuer l'installation
Bundle install
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
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
$ bundle exec rails runner Batch::DeadlineClear.deadline_clear
Running via Spring preloader in process 77676
test
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
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