Rails 5 ActiveStorage Как ждать завершения всех потоков

Сначала позвольте мне описать проблему. Я использую RSpec для запуска скрипта для генерации некоторых тестовых данных.

RAILS_ENV=development rspec spec/dev/food/food_upload.rb

Сценарий выглядит так.

    image = fixture_file_upload(Rails.root.join('spec', 'resources', 'test2.png'), 'image/png')

    (0..200).each { 
        food = FactoryBot.build :food
        p "Loading #{food.name}"
        expect {
            post :upload, params: {
                "foodUpload_foodName"=> food.name,
                "foodUpload_image"=> image
            }
        }.to change(Food, :count).by(1)
        .and change(Image, :count).by(1)

Этот скрипт отправит данные в FoodController, который затем добавит больше продуктов питания. Каждый продукт использует ActiveStorage для сохранения изображения.

Проблема в том, что этот скрипт завершает свою работу так быстро, и, как я выяснил, ActiveStorage создает новые потоки для обработки изображений. В результате у меня есть много незавершенных изображений, и при попытке загрузить изображения отображается ошибка minimagick::invalid с сообщением о неправильном заголовке изображения.

На данный момент я использую сон (5 минут) для решения этой проблемы. Просто хочу узнать, есть ли другой способ сделать это правильно.

1 ответ

Решение

Ответ должен двигаться image = fixture_file_upload() в цикл (0..200).each {}. Занял у меня день

Другие вопросы по тегам