diff --git a/app/workers/batch_generate_weather_arts_worker.rb b/app/workers/batch_generate_weather_arts_worker.rb index f3edd7b..8581d03 100644 --- a/app/workers/batch_generate_weather_arts_worker.rb +++ b/app/workers/batch_generate_weather_arts_worker.rb @@ -12,6 +12,7 @@ class BatchGenerateWeatherArtsWorker cities_to_process.each do |city| break if Time.current - start_time > MAX_DURATION + Rails.logger.info "Generating weather art for #{city.name}" GenerateWeatherArtWorker.perform_async(city.id) sleep SLEEP_DURATION diff --git a/app/workers/generate_weather_art_worker.rb b/app/workers/generate_weather_art_worker.rb index 0f8a912..9d4c9d6 100644 --- a/app/workers/generate_weather_art_worker.rb +++ b/app/workers/generate_weather_art_worker.rb @@ -36,6 +36,8 @@ class GenerateWeatherArtWorker end def create_weather_art(weather_data, prompt, image_url) + tempfile = nil + ActiveRecord::Base.transaction do weather_art = city.weather_arts.create!( weather_date: Date.today, @@ -43,21 +45,21 @@ class GenerateWeatherArtWorker **weather_data ) - attach_image(weather_art, image_url) + tempfile = Down.download(image_url) + + weather_art.image.attach( + io: File.open(tempfile.path), + filename: generate_filename, + content_type: 'image/png' + ) + weather_art end - end - - def attach_image(weather_art, image_url) - tempfile = Down.download(image_url) - weather_art.image.attach( - io: tempfile, - filename: generate_filename, - content_type: "image/png" - ) ensure - tempfile&.close - tempfile&.unlink + if tempfile + tempfile.close + tempfile.unlink + end end def generate_filename