Rails 5 ActiveStorage如何等待所有线程完成

时间:2018-07-08 23:03:44

标签: rspec rails-activestorage ruby-on-rails-5.2

首先,让我描述一下问题。我正在使用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 error with message message not image image header”。

此刻,我正在使用sleep(5.minutes)处理此问题。只想知道是否还有另一种方法可以正确地做到这一点。

1 个答案:

答案 0 :(得分:0)

答案是将image = fixture_file_upload()移到(0..200).each {}循环中。花了我一天的时间