代码之家  ›  专栏  ›  技术社区  ›  TrongBang

rails 5 activestorage如何等待所有线程完成

  •  0
  • TrongBang  · 技术社区  · 7 年前

    首先,让我描述一下这个问题。我使用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 incorrect image header”。

    目前,我正在用睡眠(5分钟)来解决这个问题。只是想知道是否有其他方法可以正确地做到这一点。

    1 回复  |  直到 7 年前
        1
  •  0
  •   TrongBang    7 年前

    答案是搬家 image = fixture_file_upload() 进入(0..200)。每个{}循环。我花了一天时间

    推荐文章