我已按照instructions on how to define a test-specific store directory for carrierwave uploads进行操作,建议打开CarrierWave::Uploader::Base
课程并重新定义store_dir
和cache_dir
,如下所示:
if defined?(CarrierWave)
CarrierWave::Uploader::Base.descendants.each do |klass|
next if klass.anonymous?
klass.class_eval do
def cache_dir
"#{Rails.root}/spec/support/uploads/tmp"
end
def store_dir
"#{Rails.root}/spec/support/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
end
end
这就像一个魅力,除非我用spork运行rspec,然后它无法修改类,上传存储在默认位置。有没有人知道为什么会发生这种情况?
答案 0 :(得分:2)
正在处理我们项目的其他人通过在AvatarUploader
行之前添加仅CarrierWave::Uploader::Base.descendants.each
的行来解决此问题,如下所示:
if defined?(CarrierWave)
AvatarUploader # load AvatarUploader class
CarrierWave::Uploader::Base.descendants.each do |klass|
#...
不完全确定为什么会这样,但确实如此。
答案 1 :(得分:0)
对于来到这里的任何人来说,接受答案的补充很少:
如果在调用之前未加载上传器类 CarrierWave :: Uploader :: Base.descendants,它将返回空数组,所以要么像接受的答案那样指定每个上传器,要么你可以做这样的事情来要求所有的上传者让我们说rails uploaders文件夹
Dir["#{Rails.root}/app/uploaders/*.rb"].each {|file| require file}
CarrierWave::Uploader::Base.descendants.each do |klass|
#...