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.rbrequire '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.rbconfig.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.rakenamespace :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
Reference
이 문제에 관하여(Digdag를 사용하여 RubyOn Rails 환경에서 대량 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HavenSpring/items/b3c3e26ef868f8d5eaf4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
루비온 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.rbrequire '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.rbconfig.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.rakenamespace :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
Reference
이 문제에 관하여(Digdag를 사용하여 RubyOn Rails 환경에서 대량 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HavenSpring/items/b3c3e26ef868f8d5eaf4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
config.autoload_paths += %W(#{config.root}/lib)
+task:
sh>: bundle exe rails runner Scripts::PostBatch.new.count -n 'test'
$ 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
Reference
이 문제에 관하여(Digdag를 사용하여 RubyOn Rails 환경에서 대량 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HavenSpring/items/b3c3e26ef868f8d5eaf4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)