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 {}. Занял у меня день