[RUBY] [Rails] Regelmäßige Stapelverarbeitung bis wann immer

[Rails] Regelmäßige Stapelverarbeitung bis wann immer

Ich habe die Stapelverarbeitung in Rails mithilfe von Wann immer implementiert, daher werde ich sie zusammenfassen.

Inhaltsverzeichnis


Betriebsumgebung

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

Was du machen willst

Ich möchte eine Aufgabe erstellen, die regelmäßig zu einer festgelegten Zeit ausgeführt wird

Verfahren

Immer installieren

Gemfile


gem 'whenever', require: false

Installation durchführen

Bundle install

Fügen Sie lib zu Schienen hinzu

Stellen Sie Rails so ein, dass der lib-Ordner gelesen wird Hiermit werden die zu stapelverarbeitenden Dateien im Ordner lib abgelegt.

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

Beschreibung der Stapelverarbeitung

Erstellen Sie in lib einen Ordner mit dem Namen batch und erstellen Sie eine Datei, die regelmäßig ausgeführt werden soll. Nach Batch :: kann ein beliebiger Name verwendet werden.

Beispiel batch/deadline_cleaner.rb

deadline_cleaner


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

Bestätigung

$ bundle exec rails runner Batch::DeadlineClear.deadline_clear

Running via Spring preloader in process 77676
test

Schedule.rb erstellen / bearbeiten

Wechseln Sie zum Stammordner Ihrer Anwendung und führen Sie den folgenden Befehl aus

$ cd blog-app
$ bundle exec wheneverize .

Bei der Ausführung wird config / sched.rb erstellt.

Beschreiben Sie anschließend den Zeitplan und die Aufgabe, die Sie in sched.rb ausführen möchten, wie unten gezeigt.

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

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

Es wird mit dem folgenden Befehl in CRON angezeigt.

$ bundle exec whenever --update-crontab 

Ausführungsergebnis

Sie können sehen, dass die Stapelverarbeitung tatsächlich jede Minute erfolgt.

$ 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] Regelmäßige Stapelverarbeitung bis wann immer
^, $ im regulären Ausdruck von Rails
Die seltsame HTML-Anzeige wurde durch Überprüfen der dynamischen Verarbeitung von Rails behoben
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Führen Sie Rails immer im Docker aus
Lerne nach und nach reguläre Ausdrücke ①
Unit Catcher von Processing
[Docker] Wird immer mit Docker + Rails verwendet
Rails singuläres Ressourcenrouting nach Ressource
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)