Carrierwave临时目录设置为上传/ tmp文件夹

时间:2012-03-05 04:28:51

标签: ruby-on-rails carrierwave

我开始使用Carrierwave,我发现它会在多个地方存储临时文件,具体取决于它是测试还是延迟工作。

如果在测试期间(rspec)完成,则临时文件将位于RAILS_ROOT/uploads/tmp目录。

如果在延迟作业期间完成,则临时文件将位于RAILS_ROOT/public/uploads/tmp

首先,我认为rails_root/tmp/uploads将是一个更明智的地方,甚至是系统临时文件夹。

其次,测试与正常运行不同似乎是一个错误。

有没有办法解决这个问题(通过配置或猴子修补)?我可以把东西放在RAILS_ROOT / tmp文件夹中吗?

3 个答案:

答案 0 :(得分:19)

您可以在' config / initializers / carrierwave.rb'中设置config.cache_dir选项。但它与“公共”相关。看起来你应该在你的上传者中这样做:

class MyUploader < CarrierWave::Uploader::Base

  def cache_dir
    # should return path to cache dir
    Rails.root.join 'tmp/uploads'
  end
end

答案 1 :(得分:7)

我正在使用carrierwave 0.10.0,似乎解决了这个问题。现在cache_dir设置接受公共目录之外的路径:

CarrierWave.configure do |config|
  config.cache_dir = Rails.root.join 'tmp/uploads'
end

答案 2 :(得分:1)

@ iKindred的回答对我有用,但我想我会扩展我如何使用CarrierWave 0.10.0开始使用Rails 4.2.3:

在何处放置配置块

由于CarrierWave不是Rails的一部分,根据我对Rails Guide的阅读,放置配置块的最佳位置是初始化文件。名称可以任意选择,但需要驻留在Rails.root/config/initializers中。我选择在配置模块后命名文件:Rails.root/config/initializers/carrier_wave.rb

初始化文件中的内容

我发现在我的Rails应用程序以development模式运行时运行测试。在测试之后,我通过取消链接存储路径来清理所有文件,如here所述。为了在不弄乱development模式下运行的Rails应用程序存储的文件的情况下工作,存储路径需要由环境分隔!因此,@ iKindred的修改版本的答案是:

#config/initializers/carrier_wave.rb
CarrierWave.configure do |config|
  config.cache_dir = File.join(Rails.root, 'tmp', 'uploads', Rails.env)
end
相关问题