2010-11-04 6 views
9

मुझे एक अजीब समस्या है। मैं मुझे लगता है कि चाल करना चाहिए (और करता है) कोड की इस पंक्ति पाया सिद्धांत 2 में मेरी की प्रॉक्सी ऑटो उत्पादन बंद करना चाहते हैं:सिद्धांत 2. ऑटो जनरेटिंग प्रॉक्सी

$config->setProxyDir(APPPATHSYSTEM."/proxies"); 
$config->setProxyNamespace('Proxies'); 

// Auto generate proxies for development 
$config->setAutoGenerateProxyClasses(DEVELOPMENT); 

अपने परीक्षण वातावरण प्रॉक्सी आवेदन पर स्थित हैं पर/प्रॉक्सी। यानी .:

application/proxies/BaseUserProxy.php 

जब मैं लाइव वातावरण मेरी कोड अचानक आवेदन/प्रॉक्सी/प्रॉक्सी जो वास्तविक स्थान नहीं है पर प्रॉक्सी के लिए खोज करता पर हूँ।

मुझे समझ में आता है कि इसका नामस्थान के साथ कुछ करना है, लेकिन मुझे समझ में नहीं आता कि setAutoGenerateProxy विधि का उपयोग करते समय यह अलग-अलग व्यवहार क्यों करता है।

कोई भी विचार?

orm:generate-proxies 

विकल्प:

संपादित

मैं का उपयोग कर नए प्रॉक्सी उत्पन्न किये है।

कौन मुझे इस उत्पादन दिया:

php doctrine.php orm:generate-proxies 
Processing entity "Base\Element" 
Processing entity "Base\Page" 
... 
Processing entity "Base\Site" 

Proxy classes generated to "/var/www/application/proxies" 

अंतिम पंक्ति को देखते हुए, प्रॉक्सी/var/www/आवेदन/प्रॉक्सी में उत्पन्न कर रहे हैं। निर्देशिका सूची इस तरह दिखती है:

BaseElementProxy.php 
BasePageProxy.php 
... 
BaseSiteProxy.php 

तो कोई अतिरिक्त प्रॉक्सी निर्देशिका नहीं है। लेकिन जब मैं अपने वेब पृष्ठ ताज़ा यह सोचता है कि वहाँ है, यह मुझे निम्न त्रुटि देता है:

Warning: require(/var/www/application//proxies/Proxies/BaseUserProxy.php) 
[function.require]: failed to open stream: 
No such file or directory in /var/www/library/Doctrine/Common/ClassLoader.php on line 148 

अतिरिक्त प्रॉक्सी निर्देशिका क्यों जोड़ा जाता है? यदि मैं प्रत्येक अनुरोध पर प्रॉक्सी उत्पन्न करता हूं तो यह अतिरिक्त प्रॉक्सी निर्देशिका में नहीं दिखता है। कोई?

@Bryan एम: यह एक समाधान है, लेकिन कोई समाधान नहीं है। इसके अलावा, यह काम नहीं करता है। जब प्रॉक्सी वे, यदि आपका सुझाव लागू, APPPATHSYSTEM में उत्पन्न हो जाएगा पैदा करने और मेरी webapp उन्हें APPPATHSYSTEM से लोड करने के लिए कोशिश करेंगे। "प्रॉक्सी"।

$config->setAutoGenerateProxyClasses(DEVELOPMENT); 

अगर विकास सच है, यह APPPATHSYSTEM पर दिखेगा: समस्या अगर मैं का उपयोग करें कि सिस्टम अलग-अलग स्थानों पर प्रॉक्सी के लिए दिखता है। यदि विकास गलत पर सेट किया गया है, तो यह APPPATHSYSTEM को देखेगा। "प्रॉक्सी"। बस विकास कॉन्सेंस स्विच करने से मेरा आवेदन टूट जाता है, सैद्धांतिक रूप से क्या संभव नहीं होना चाहिए।

+0

प्रॉक्सी निर्देशिका को केवल APPPATHSYSTEM में सेट करने का प्रयास करें। इसे वहां से 'प्रॉक्सी' नामस्थान लेना चाहिए। –

उत्तर

2

मुझे नहीं लगता कि स्व-उत्पन्न प्रॉक्सी देखभाल करते हैं।

उत्पादन के लिए स्वत: उत्पन्न प्रॉक्सी को धक्का देने के बजाय, आपको शायद doctrine orm:generate-proxies होना चाहिए, जो मुझे संदेह है कि उन्हें उस स्थान पर रखा जाएगा जहां आपका उत्पादन कोड उन्हें देखने के लिए कॉन्फ़िगर किया गया है।

+0

मैंने इसे आज़माया। मेरा संपादन जांचें। –

4

आप ओएस एक्स पर विकसित करने और लिनक्स के लिए की तैनाती कर रहे हैं? ओएस एक्स के फाइल सिस्टम मामले असंवेदनशील है।इसलिए मैं अक्सर एक समस्या में भाग लेता हूं जहां मैं कक्षा के मामले को गलत टाइप करता हूं, और यह स्थानीय पर्यावरण में ठीक है और गुजरता है, लेकिन हमारे सर्वर पर चोक करता है।

तो इस मामले में, ओएस एक्स में, नामस्थान "प्रॉक्सी" "प्रॉक्सी" को हल करने में सक्षम है, लेकिन उत्पादन में, यह वर्ग फ़ोल्डर नहीं ढूंढ सकता है, और इसे "/ प्रॉक्सी/प्रॉक्सीज़" "।

3

यदि आप फ़ोल्डर को "/ temp" नामक किसी चीज़ का नाम बदलते हैं तो आपको पथ और नामस्थान के बीच का अंतर पता चलेगा।

पथ प्रॉक्सी उत्पन्न होने वाली निर्देशिका का पूर्ण पथ है। नेमस्पेस आपको यह कॉन्फ़िगर करने की अनुमति देने के लिए आवश्यक है कि एक ऑटोलोडर इन इकाइयों को कैसे उठाता है।

आपके मामले में पथ "प्रॉक्सी/प्रॉक्सी" जैसा कुछ होना चाहिए और नामस्थान तब "प्रॉक्सी" है। आपके autoloader को "प्रॉक्सी /" निर्देशिका में नामस्थान उपसर्ग "प्रॉक्सी" सुनने के लिए कॉन्फ़िगर किया जाना है।

यह सिद्धांत 2 आरसी 1 के साथ सभी मनोदशा है, हालांकि, हमें कोई अतिरिक्त लागत पर ऑटोलोडर की मदद किए बिना प्रॉक्सी पथ को स्पष्ट रूप से लोड करने का कोई तरीका मिला। प्रॉक्सी नेमस्पेस कॉन्फिगर्यूरिनो इसलिए यह सुनिश्चित करने के लिए आवश्यक है कि प्रॉक्सी के समान नामस्थान में कोई अन्य वर्ग न हो।

+0

मुझे नामस्थान और पथ के बीच का अंतर पता है :)। वास्तविक समस्या के लिए फिर से मेरी पोस्ट पढ़ें। यद्यपि आपकी प्रतिक्रिया के लिए धन्यवाद। –