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
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.
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
J'ai utilisé Option Parser pour obtenir les paramètres.
/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)
rails_runner.dig
+task:
sh>: bundle exe rails runner Scripts::PostBatch.new.count -n 'test'
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
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
rake.dig
+task:
sh>: bundle exec rake task_post:count[test4]
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