Digdag를 사용하여 RubyOn Rails 환경에서 대량 구현

Digdag 정보


Getting started
Architecture
Concepts
Workflow definition
Scheduling workflow
Operators
Language API -Ruby
Digdag를 통해 각 환경에 대한 설정 값 변경(Rubby On Rails)
Digdag를 사용하여 RubyOn Rails 환경에서 대량 구현

차리다


루비온 Rails 자습서의 샘플 응용 프로그램 다운로드
https://github.com/yasslab/sample_app
Rubby on Rails 자습서의 샘플 응용프로그램을 실행하고 사용자 및 포스트를 등록합니다.
테스트 사용자를 만들어서 네 개의 투고에 로그인했습니다.

이번에는 사용자 이름을 매개 변수로 하여 해당 사용자의 투고 수를 출력하는 간단한 대량으로 제작한다.
대량 설치와 시동은 두 가지 방법으로 한다.
Rails Write Batch를 사용할 때 자주 사용하는 다음 두 가지 방법입니다.
① rails runner: 스크립트로 쓰기
■ 장점
루비 스크립트라서 자유도가 높아요
■단점
Rails 환경을 읽을 때마다 느려요.
일괄 처리처는 아직 결정하지 않았다
② rake task: 구축 작업으로 배치 작성
■ 장점
namespace 방법으로 그룹을 나눌 수 있습니다
task 놓을 곳이 정해져 있어서 길을 잃지 않아요.
■단점
처리된 줄 수가 길수록 더 괴롭다
매개 변수를 교차시키는 방법에 문제가 있다
일시적으로 사용하는 대량 방치처는 매우 번거롭다

개요


Digdag: 로그인 스케줄, Alert, 주 작업만

rails runner로 실행


매개 변수 획득 사용OptionParser.

배치 스크립트 추가

/lib/scripts/ 아래에 배치 스크립트 추가
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} 名前: #{user.name}"
      puts "投稿数: #{Micropost.where(user_id: user.id).count}"
    end
  end
end
lib 파일 자동 로드
config/application.rb
config.autoload_paths += %W(#{config.root}/lib)

workflows 밑에서 railsrunner.dig 추가 및 다음 내용 추가


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

실행


테스트 사용자의 ID, 이름, 투고 수를 출력했습니다.
실행 결과
$ 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 名前: test
投稿数: 4

라크대로 실행


rake 작업 생성

$ rails g task task_post
Running via Spring preloader in process 4255
      create  lib/tasks/tast_post.rake
/lib/tasks/task_post.rake 파일을 생성하기 때문에 다음 원본을 열고 추가합니다
lib/tasks/task_post.rake
namespace :task_post do
  desc "ユーザー投稿数を取得"
  task :count, ['name'] => :environment do |task, args|
    user = User.find_by(name: args.name)
    puts "ID: #{user.id} 名前: #{args.name}"
    puts "投稿数: #{Micropost.where(user_id: user.id).count}"
  end
end

Workflow 추가


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

실행


테스트 사용자의 ID, 이름, 투고 수를 출력했습니다.
실행 결과
$ 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 名前: test
投稿数: 4


좋은 웹페이지 즐겨찾기