【问题标题】:Carrierwave store_dir not modified when running rspec with spork使用 spork 运行 rspec 时未修改 Carrierwave store_dir
【发布时间】:2012-08-21 03:08:46
【问题描述】:

我遵循了instructions on how to define a test-specific store directory for carrierwave uploads,它建议打开CarrierWave::Uploader::Base 类并重新定义store_dircache_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 时,它无法修改类并且上传存储在默认位置。有谁知道为什么会发生这种情况?

【问题讨论】:

  • store和cache_dir有什么区别?

标签: ruby-on-rails rspec carrierwave spork


【解决方案1】:

参与我们项目的其他人通过在 CarrierWave::Uploader::Base.descendants.each 行之前添加一行 AvatarUploader 解决了这个问题,如下所示:

if defined?(CarrierWave)
  AvatarUploader # load AvatarUploader class 
  CarrierWave::Uploader::Base.descendants.each do |klass|
  #...

不完全确定为什么会这样,但确实如此。

【讨论】:

【解决方案2】:

对于任何来这里的人来说,除了接受的答案之外:

如果在调用之前没有加载上传器类 CarrierWave::Uploader::Base.descendants,它将返回空数组,因此要么像接受的答案那样指定每个上传者,要么你可以做这样的事情来要求所有上传者来自让我们说 rails uploaders 文件夹

Dir["#{Rails.root}/app/uploaders/*.rb"].each {|file| require file}
CarrierWave::Uploader::Base.descendants.each do |klass|
#...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 2012-04-18
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多