我开始使用Carrierwave,我发现它根据是测试还是延迟工作在多个地方存储临时文件.
如果在测试期间完成(rspec),临时文件将位于RAILS_ROOT / uploads / tmp目录下.
如果在延迟作业期间完成,临时文件将位于RAILS_ROOT / public / uploads / tmp
首先,我认为rails_root / tmp / uploads将是一个更明智的地方,甚至是系统临时文件夹.
第二,测试与正常运行不同似乎是一个错误.
解决方法
可以在config / initializers / carrierwave.rb中设置config.cache_dir选项.但它是相对于’/ public’.您应该在上传者中执行此操作:
class MyUploader < CarrierWave::Uploader::Base def cache_dir # should return path to cache dir Rails.root.join 'tmp/uploads' end end