2012-03-05 17 views
13

पर सेट करने के लिए सेट किया गया है मैंने कैरियरवेव का उपयोग करना शुरू किया, और मुझे पता चला कि यह कई स्थानों पर अस्थायी फ़ाइलों को संग्रहीत करता है, चाहे वह परीक्षण या देरी हो रहा है या नहीं।कैरियरवेव अस्थायी निर्देशिका अपलोड/tmp फ़ोल्डर

यदि यह परीक्षण (आरएसपीईसी) के दौरान किया जाता है, तो अस्थायी फ़ाइलें RAILS_ROOT/uploads/tmp निर्देशिका पर होंगी।

यह देरी काम के दौरान किया जाता है, अस्थायी फ़ाइलें हो जाएगा पर RAILS_ROOT/public/uploads/tmp

पहले, मैं सोच रहा था कि rails_root/tmp/uploads एक अधिक समझदार जगह, या यहाँ तक कि प्रणाली अस्थायी फ़ोल्डर होगा।

दूसरा, सामान्य रन के लिए अलग-अलग परीक्षण एक बग जैसा लगता है।

क्या इसे ठीक करने का कोई तरीका है (या तो कॉन्फ़िगरेशन या बंदर पैचिंग द्वारा)? और क्या मैं चीजों को RAILS_ROOT/tmp फ़ोल्डर में डाल सकता हूं?

उत्तर

19

config.cache_dir विकल्प है जिसे आप 'config/startizers/carrierwave.rb' में सेट कर सकते हैं। लेकिन यह '/ public' के सापेक्ष है। carrierwave 0.10.0 का उपयोग कर

class MyUploader < CarrierWave::Uploader::Base 

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

एक आकर्षण की तरह काम करता है। ध्यान दें कि इस पर प्रभाव डालने के लिए आपको अपने आवेदन को पुनरारंभ करना होगा। –

+0

मैंने कक्षा में 'attr_writer cache_dir' भी जोड़ा और फ़ंक्शन को '@cache_dir में बदल दिया || Rails.root.join 'tmp/uploads' प्रति-उदाहरण ओवरराइड (विकास फ़ाइलों से परीक्षण फ़ाइलों को अलग करने के लिए उपयोगी) की अनुमति देने के लिए। – Leo

+0

cache_dir और store_dir के बीच क्या अंतर है? – Jwan622

7

इम और ऐसा लगता है इस व्यवहार संबोधित किया गया था: ऐसा लगता है कि आपको क्या करना चाहिए कि अपने अपलोड करने वाले व्यक्तियों में। अब cache_dir सेटिंग एक रास्ता सार्वजनिक निर्देशिका के बाहर है कि स्वीकार करता है:

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

@ iKindred का जवाब मेरे लिए काम किया, लेकिन मैंने सोचा कि मैं CarrierWave 0.10 के साथ ऑन रेल्स 4.2.3 काम करने के लिए कैसे मुझे मिल गया पर विस्तार चाहते हैं .0:

कहाँ कॉन्फ़िगर ब्लॉक

डाल करने के लिए CarrierWave रेल का हिस्सा नहीं है के रूप में, सबसे अच्छी जगह Rails Guide की मेरी पढ़ने के अनुसार, कॉन्फ़िगर ब्लॉक डाल करने के लिए, एक प्रारंभकर्ता फ़ाइल है। नाम मनमाने ढंग से चुना जा सकता है, लेकिन इसे Rails.root/config/initializers में रहने की आवश्यकता है। मैंने कॉन्फ़िगर करने वाले मॉड्यूल के बाद फ़ाइल का नाम चुना: Rails.root/config/initializers/carrier_wave.rb

प्रारंभकर्ता फ़ाइल

मुझे लगता है कि मैं परीक्षण चलाने जबकि मेरी रेल एप्लिकेशन development मोड में चल रहा में क्या डाल करने के लिए। परीक्षण के बाद मैं here वर्णित स्टोरेज पथ को अनलिंक करके सभी फ़ाइलों को साफ़ करता हूं। इसके लिए development मोड में चल रहे रेल ऐप द्वारा संग्रहीत फ़ाइलों के साथ गड़बड़ किए बिना काम करने के लिए, स्टोरेज पथ को पर्यावरण द्वारा अलग करने की आवश्यकता है! इसलिए, @ iKindred के उत्तर का मेरा संशोधित संस्करण है:

#config/initializers/carrier_wave.rb 
CarrierWave.configure do |config| 
    config.cache_dir = File.join(Rails.root, 'tmp', 'uploads', Rails.env) 
end 
संबंधित मुद्दे