Stapelimplementierung in der RubyOnRails-Umgebung mit Digdag

Über Digdag

Getting started Architecture Concepts Workflow definition Scheduling workflow Operators Command reference Language API -Ruby Ändern Sie den Einstellungswert für jede Umgebung mit Digdag (RubyOnRails) Stapelimplementierung in RubyOnRails-Umgebung mit Digdag

Vorbereitung

Laden Sie die Beispielanwendung für das Ruby on Rails-Tutorial herunter https://github.com/yasslab/sample_app

Führen Sie die Beispielanwendung des Ruby on Rails-Lernprogramms aus, um Benutzer und Beiträge zu registrieren. Ich habe einen Testbenutzer erstellt und 4 Beiträge registriert. スクリーンショット 2020-07-20 19.01.38.png

Dieses Mal erstellen wir einen einfachen Stapel, der die Anzahl der Beiträge des entsprechenden Benutzers mit dem Benutzernamen als Parameter ausgibt. Es gibt zwei Möglichkeiten, den Stapel zu implementieren und zu starten.

Probieren wir die folgenden zwei Methoden aus, die häufig beim Schreiben der Stapelverarbeitung in Rails verwendet werden. ① Rails Runner: Schreiben Sie einen Stapel als Skript ② Rechenaufgabe: Schreiben Sie einen Stapel als Build-Aufgabe

Überblick

batch-2.png

Laufen Sie mit Schienenläufer

Ich habe Option Parser verwendet, um die Parameter abzurufen.

Stapelverarbeitungsskript hinzugefügt

/lib/scripts/Stapelverarbeitungsskript unter hinzugefügt

lib/scripts/post_batch.rb


require 'optparse'

module Scripts
  class PostBatch
    def initialize
      @option = {}
      OptionParser.new do |opt|
        opt.on('-n VALUE', 'user name') { |v| @option[:name] = v}
        opt.parse!(ARGV)
      end
    end

    def count
      user = User.find_by(name: @option[:name])
      puts "ID: #{user.id}Name:#{user.name}"
      puts "Anzahl der Beiträge:#{Micropost.where(user_id: user.id).count}"
    end
  end
end

Laden Sie Ruby-Dateien automatisch unter lib

config/application.rb


config.autoload_paths += %W(#{config.root}/lib)

Fügen Sie unter Workflows rails_runner.dig hinzu und fügen Sie den folgenden Inhalt hinzu

rails_runner.dig


+task:
  sh>: bundle exe rails runner Scripts::PostBatch.new.count -n 'test'

Lauf

Die ID, der Name und die Anzahl der Beiträge des Testbenutzers werden ausgegeben.

Ausführungsergebnis


$ digdag run rails_runner.dig --rerun
2020-07-20 19:38:39 +0900 [INFO](0017@[0:default]+rails_runner+task): sh>: bundle exec rails runner Scripts::PostBatch.count 'test'
ID:5 Name: Test
Anzahl der Beiträge: 4

Mit Rechen laufen

Rake-Task-Generierung

python


$ rails g task task_post
Running via Spring preloader in process 4255
      create  lib/tasks/tast_post.rake

/lib/tasks/task_post.Eine Rake-Datei wird generiert. Öffnen Sie sie und fügen Sie die folgende Quelle hinzu





#### **`lib/tasks/task_post.rake`**
```rb

namespace :task_post do
  desc "Holen Sie sich die Anzahl der Benutzerbeiträge"
  task :count, ['name'] => :environment do |task, args|
    user = User.find_by(name: args.name)
    puts "ID: #{user.id}Name:#{args.name}"
    puts "Anzahl der Beiträge:#{Micropost.where(user_id: user.id).count}"
  end
end

Workflow hinzugefügt

rake.dig


+task:
  sh>: bundle exec rake task_post:count[test4]

Lauf

Die ID, der Name und die Anzahl der Beiträge des Testbenutzers werden ausgegeben.

Ausführungsergebnis


$ digdag run rake.dig --rerun
2020-07-20 20:04:16 +0900 [INFO](0017@[0:default]+rake+task): sh>: bundle exec rake task_post:count[test]
ID:5 Name: Test
Anzahl der Beiträge: 4




Recommended Posts

Stapelimplementierung in der RubyOnRails-Umgebung mit Digdag
Verwendung von Umgebungsvariablen in RubyOnRails
Lassen Sie uns mit Azure Batch einen Stapel in einem Container ausführen
[Hinweis] Struts2-Umgebungskonstruktion mit Gradle in Eclipse
Ermöglichen Sie die Entwicklung in einer Eclipse-Umgebung mit dem iPLAss SDK
Interpreter-Implementierung durch Java
Boyer-Moore-Implementierung in Java
Implementierung der Heap-Sortierung (in Java)
Implementieren einer Datenbank mit Realm
Protokollausgabe im Json-Format mit lograge / lograge-sql mit RubyOnRails
Ändern Sie den Einstellungswert für jede Umgebung mit Digdag (RubyOnRails).
Konfigurationsskript für die Verwendung von Docker in einer Proxy-Umgebung unter Ubuntu 20.04.1