Implémentation par lots dans l'environnement RubyOnRails à l'aide de Digdag

À propos de Digdag

Getting started Architecture Concepts Workflow definition Scheduling workflow Operators Command reference Language API -Ruby Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails) Implémentation par lots dans l'environnement RubyOnRails à l'aide de Digdag

Préparation

Télécharger un exemple d'application pour le didacticiel Ruby on Rails https://github.com/yasslab/sample_app

Exécutez l'exemple d'application du didacticiel Ruby on Rails pour enregistrer les utilisateurs et les publications. J'ai créé un utilisateur test et enregistré 4 messages. スクリーンショット 2020-07-20 19.01.38.png

Cette fois, nous allons créer un lot simple qui génère le nombre de messages de l'utilisateur correspondant avec le nom d'utilisateur comme paramètre. Il existe deux façons d'implémenter et de démarrer le lot.

Essayons les deux méthodes suivantes qui sont souvent utilisées lors de l'écriture du traitement par lots dans Rails. ① rails runner: écrire un lot sous forme de script ② tâche rake: écrire un lot comme tâche de construction

Aperçu

batch-2.png

Courir avec le coureur de rails

J'ai utilisé Option Parser pour obtenir les paramètres.

Ajout d'un script de traitement par lots

/lib/scripts/Ajout d'un script de traitement par lots sous

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}Nom:#{user.name}"
      puts "Nombre de postes:#{Micropost.where(user_id: user.id).count}"
    end
  end
end

Charger automatiquement les fichiers ruby sous lib

config/application.rb


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

Ajoutez rails_runner.dig sous les workflows et ajoutez le contenu suivant

rails_runner.dig


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

Courir

L'ID, le nom et le nombre de messages de l'utilisateur de test sont affichés.

Résultat d'exécution


$ 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 Nom: test
Nombre de messages: 4

Courir avec un râteau

génération de tâches de râteau

python


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

/lib/tasks/task_post.Un fichier rake sera généré, alors ouvrez-le et ajoutez la source suivante





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

namespace :task_post do
  desc "Obtenez le nombre de messages d'utilisateurs"
  task :count, ['name'] => :environment do |task, args|
    user = User.find_by(name: args.name)
    puts "ID: #{user.id}Nom:#{args.name}"
    puts "Nombre de postes:#{Micropost.where(user_id: user.id).count}"
  end
end

Flux de travail ajouté

rake.dig


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

Courir

L'ID, le nom et le nombre de messages de l'utilisateur de test sont affichés.

Résultat d'exécution


$ 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 Nom: test
Nombre de messages: 4




Recommended Posts

Implémentation par lots dans l'environnement RubyOnRails à l'aide de Digdag
Comment utiliser les variables d'environnement dans RubyOnRails
Exécutons un lot dans un conteneur à l'aide d'Azure Batch
[Note] Construction de l'environnement Struts2 à l'aide de Gradle dans Eclipse
Autoriser le développement dans l'environnement Eclipse à l'aide du SDK iPLAss
Implémentation de l'interpréteur par Java
Implémentation Boyer-Moore en Java
Implémentation du tri de tas (en java)
Implémentation d'une base de données avec Realm
Journaliser la sortie au format Json en utilisant lograge / lograge-sql avec RubyOnRails
Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails)
Script de configuration pour l'utilisation de docker dans un environnement proxy sur ubuntu 20.04.1