2011-09-09 8 views
12

परिनियोजन बाधाओं के कारण, मैं अपने फ़ाइल सिस्टम में कहीं भी/var/... के नीचे मेरे Symfony2 एप्लिकेशन द्वारा उपयोग की जाने वाली लॉग और कैश निर्देशिका करना चाहता हूं। इस कारण से, मैं सिम्फनी को कॉन्फ़िगर करने और इन दो निर्देशिकाओं के लिए डिफ़ॉल्ट स्थान को ओवरराइड करने का एक तरीका ढूंढ रहा हूं।तैनाती बाधाओं के कारण cache_dir और log_dir को बदलना

मैंने kernel.cache_dir और kernel.log_dir को देखा है और कक्षा Kernel.php को पढ़ा है। मैंने जो देखा है, उससे मुझे नहीं लगता कि कॉन्फ़िगरेशन द्वारा डीआईआर स्थानों को बदलना संभव है और मुझे कर्नेल.एफपी कक्षा को पैच करना होगा।

क्या यह सच है, या फ्रेमवर्क कोड को संशोधित किए बिना मैं जो हासिल करना चाहता हूं उसे प्राप्त करने का कोई तरीका है?

उत्तर

5

मुझे लगता है कि फ़ोल्डर को किसी अन्य स्थान से लिंक करना सबसे आसान तरीका है। हमने इसे प्रोड सर्वर पर बनाया है, लेकिन जब आप विंडोज़ पर स्थानीय विकसित करते हैं तो सिम्लिंक सेट करने के लिए यह थोड़ा जटिल होता है।

ln -s /var/cache/ /var/www/project/app/cache 

ऐसा कुछ।

+0

को मैं (Assetic में बेवकूफ कीड़े की तरह) समस्याओं के बहुत सारे समाधान कर लिया है देखें के साथ 'ln -snf' बहुत आसानी से, यह जाने का रास्ता है। – ChocoDeveloper

16

एप्लिकेशन के लिए निम्न विधियों जोड़ें/AppKernel.php (AppKernel फैली कर्नेल) उन्हें अपनी पसंद के रास्तों वापसी कर रही है:

public function getCacheDir() 
{ 
    return $this->rootDir . '/my_cache/' . $this->environment; 
} 

public function getLogDir() 
{ 
    return $this->rootDir . '/my_logs'; 
} 
7

मैं अपनी पोस्ट को खोजने के लिए खुश था, लेकिन मैं एक छोटा सा की उलझन में था जवाबहीन जवाब।

मुझे एक ही समस्या मिली और पता चला कि लॉग कॉन्फ़िगर पैरामीटर kernel.logs_dir पर निर्भर हैं।

तो मैं सिर्फ यह मेरे config.yml मानकों को जोड़ा गया:

kernel.logs_dir: /var/log/symfonyLogs 

मुझे आशा है कि यह आप के लिए भी में सहायक होगा, अगर इसकी एक देर से जवाब।

1

सिम्फनी में आप ऐप कर्नेल में विधि को विस्तारित करके कैश (और लॉग) निर्देशिका को ओवरराइड कर सकते हैं।

 
// app/appKernel.php 
class AppKernel extends Kernel 
{ 
    // ... 

    public function getCacheDir() 
    { 
     return $this->rootDir.'/'.$this->environment.'/cache'; 
    } 
} 

चेक बाहर http://symfony.com/doc/current/cookbook/configuration/override_dir_structure.html#override-cache-dir

0

मैं configuration solution from Dragnic थे, लेकिन क्योंकि इस फ़ाइल Git द्वारा नजरअंदाज कर दिया है मैं parameters.yml फ़ाइल में रास्तों डाल दिया। दूसरे शब्दों में, यह मेरे पीसी से गिट भंडार में सिंक्रनाइज़ नहीं किया गया है, इसलिए prod वातावरण में कोई प्रभाव नहीं है।

# app/config/parameters.yml 
parameters: 
    database_driver: pdo_mysql 
    [...] 
    kernel.cache_dir: "T:/project/cache" 
    kernel.logs_dir: "T:/project/logs" 

कॉन्फ़िगरेशन: विंडोज 7, डब्ल्यूएएमपी 2.4 और सिम्फनी 2.3.20।

लेकिन आप जानते हैं कि करने के लिए है:

अपने कॉन्फ़िग फ़ाइल से kernel.cache_dir पैरामीटर ओवरराइट करने के लिए एक बहुत बुरा विचार है, और नहीं Symfony में कैश फ़ोल्डर बदलने के लिए एक समर्थित तरीका है।

यह चीजें तोड़ता है क्योंकि अब आपके पास कर्नेल Kernel::getCacheDir() और पैरामीटर के लिए अलग-अलग कैश फ़ोल्डर्स होंगे।

स्रोत: https://github.com/symfony/AsseticBundle/issues/370

तो तुम, केवल dev वातावरण में इसका इस्तेमाल करते हैं और यदि आप एप्लिकेशन/AppKernel.php फ़ाइल की सामग्री को बदल नहीं करना चाहती अन्यथा अन्य उत्तर देखना चाहिए।

+1

चेतावनी => बादा आईडीए !!! विशेष रूप से यदि आप एसेटिक का उपयोग कर रहे हैं: https://github.com/symfony/AsseticBundle/issues/370 – Oliboy50

+0

@ ओलिबॉय 50: धन्यवाद, मैंने उपयोगकर्ताओं को चेतावनी देने के लिए अपना उत्तर अपडेट किया। –

3

मैं एक विकल्प देना चाहता हूं और यह इन निर्देशिकाओं को बदलने के लिए पर्यावरण चर सेट करना है। इस तरह मंच के आधार पर सेट करना आसान है। (परीक्षण, उत्पादन या विकास)

export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache" 
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs" 

पर्यावरण चर को SetEnv के साथ वर्चुअल होस्ट में भी सेट किया जा सकता है। कर्नेल पैरामीटर सिम्फनी पढ़ते समय SYMFONY__ से शुरू होने वाले सभी $ _SERVER चर के लिए देखेंगे, पहले भाग को पट्टी करें और सभी डबल अंडरस्कोर को एक में परिवर्तित करें।

Source code

लाइन 568 608

संबंधित मुद्दे