2012-03-05 72 views
13

我開始使用Carrierwave,我發現它存儲臨時文件在多個地方,這取決於它是測試還是延遲作業。Carrierwave臨時目錄設置爲uploads/tmp文件夾

如果在測試過程中(rspec)完成,臨時文件將在RAILS_ROOT/uploads/tmp目錄中。

如果延遲作業過程完成後,臨時文件將在RAILS_ROOT/public/uploads/tmp

首先,我在想,rails_root/tmp/uploads將是一個更明智的地方,甚至在系統的臨時文件夾。

其次,與正常運行不同的測試看起來像一個錯誤。

有沒有辦法解決這個問題(通過配置或猴子修補)?我可以把東西放在RAILS_ROOT/tmp文件夾中嗎?

回答

19

您可以在'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 
+0

工程就像一個魅力。請注意,您需要重新啓動應用程序才能生效。 – 2013-03-03 20:40:11

+0

我還在類中添加了'attr_writer cache_dir',並將函數改爲'@cache_dir || Rails.root.join'tmp/uploads''允許每個實例的覆蓋(用於隔離開發文件中的測試文件)。 – Leo 2013-06-10 14:21:56

+0

cache_dir和store_dir有什麼區別? – Jwan622 2016-03-19 19:12:08

7

Im使用carrierwave 0.10.0和似乎這個行爲已解決。現在cache_dir設置接受是公共目錄之外的路徑:

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

@ iKindred的回答爲我工作,但我想我會在我得到了它擴大與CarrierWave 0.10 on Rails的4.2.3工作0.0:

哪裏擺放配置塊

由於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 
相關問題