add params to task so we can restart the script from the failed attempt in case it happens

This commit is contained in:
zmagod 2018-01-05 13:23:58 +01:00
parent a87c43e999
commit 498f5eec13

View file

@ -7,17 +7,27 @@ namespace :tiny_mce_asset do
nil, nil, 7.days.ago).destroy_all
end
desc 'Generate new tiny_mce_assets and replace old assets in RTE'
task regenerate_images: :environment do
desc 'Generate new tiny_mce_assets and replace old assets in RTE for ' \
'steps. Assign the last printed id if the script crashes or ' \
'id + 1 if there is a problematic asset'
task :regenerate_step_images, [:last_id] => :environment do |_, args|
regex = /\[~tiny_mce_id:([0-9a-zA-Z]+)\]/
replaced_images = 0
failed_attempts = 0
all_images = TinyMceAsset.count
all_images = TinyMceAsset.where('step_id IS NOT NULL').count
failed_attempts_ids = []
puts 'Start processing steps...'
Step.find_each do |step|
params = { batch_size: 100 }
if args.present? && args[:last_id].present?
# fetch all steps and sort them asc
params[:start] = args[:last_id].to_i
end
Step.find_each(batch_size: 100) do |step|
next unless step.description && step.description.match(regex)
team = step.protocol.team
puts "******************************* \n\n\n\n"
puts "Processing step id => [#{step.id}] \n\n\n\n"
puts '*******************************'
step.description.gsub!(regex) do |el|
match = el.match(regex)
old_img = TinyMceAsset.find_by_id(match[1])
@ -43,10 +53,36 @@ namespace :tiny_mce_asset do
step.save
end
puts 'Completed processing steps...'
puts '----------- TASK REPORT -----------------'
puts "All images: #{all_images}"
puts "Recreated images: #{replaced_images}"
puts "Failed attempts: #{failed_attempts}"
puts "TinyMceAsset ids of failed attempts: #{failed_attempts_ids}"
puts '-----------------------------------------'
end
desc 'Generate new tiny_mce_assets and replace old assets in RTE ' \
'for results. Assign the last printed id if the script crashes or ' \
'id + 1 if there is a problematic asset'
task :regenerate_results_images, [:last_id] => :environment do |_, args|
regex = /\[~tiny_mce_id:([0-9a-zA-Z]+)\]/
replaced_images = 0
failed_attempts = 0
all_images = TinyMceAsset.where('result_text_id IS NOT NULL').count
failed_attempts_ids = []
params = { batch_size: 100 }
if args.present? && args[:last_id].present?
params[:start] = args[:last_id].to_i
end
puts 'Start processing result_texts...'
ResultText.find_each do |result_text|
ResultText.find_each(params) do |result_text|
next unless result_text.text && result_text.text.match(regex)
team = result_text.result.my_module.protocol.team
puts "******************************************* \n\n\n\n"
puts "Processing result_text id => [#{result_text.id}] \n\n\n\n"
puts '*******************************************'
result_text.text.gsub!(regex) do |el|
match = el.match(regex)
old_img = TinyMceAsset.find_by_id(match[1])