Ich habe die Stapelverarbeitung in Rails mithilfe von Wann immer implementiert, daher werde ich sie zusammenfassen.
OS : macOS Mojave 10.14.6
ruby : 2.6.3p62
rails : 5.2.4
Ich möchte eine Aufgabe erstellen, die regelmäßig zu einer festgelegten Zeit ausgeführt wird
Gemfile
gem 'whenever', require: false
Installation durchführen
Bundle install
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
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
$ bundle exec rails runner Batch::DeadlineClear.deadline_clear
Running via Spring preloader in process 77676
test
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
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