2013-06-18 8 views
10

मैं अपने इन-डेवलपमेंट प्रोपेल प्रोजेक्ट पर पहली बार माइग्रेशन का उपयोग करने की कोशिश कर रहा हूं (इसलिए मुझे 15 एमबी डेटा दोबारा डालने की ज़रूरत नहीं है), लेकिन कुछ कठिनाइयों का सामना करना पड़ रहा है। मैंने अपनी स्कीमा में बदलाव किए और propel-gen diff चलाया। मुझे पहली बार एक त्रुटि मिली कि यह मेरी buildtime-conf.xml फ़ाइल का पता नहीं लगा सका। मैंने अभी तक एक नहीं बनाया है (क्योंकि यह आवश्यक नहीं था), लेकिन पढ़ें कि संरचना runtime-conf.xml जैसी ही होनी चाहिए। मैंने runtime-conf.xml से buildtime-conf.xml पर प्रतिलिपि बनाई। और अब निम्न त्रुटि प्राप्त:पोस्टग्रेएसक्यूएल माइग्रेशन एडाप्टर को खोजने में असमर्थ

[propel-sql-diff] Reading databases structure... 
[phingcall] Unable to find adapter for datasource [project]. 
Execution of target "sql-diff" failed for the following reason: /var/www/project/vendor/propel/propel1/generator/build-propel.xml:317:26: Execution of the target buildfile failed. Aborting. 
    [phing] /var/www/project/vendor/propel/propel1/generator/build-propel.xml:317:26: Execution of the target buildfile failed. Aborting. 

मेरे क्रम और buildtime फ़ाइलों की तरह लग रही है:

<?xml version="1.0" encoding="UTF-8"?> 
<database name="project" defaultIdMethod="native"> 
    <table schema="accounts" name="accounts" phpName="Account" package="accounts"> 
     <column /> 
    </table> 
</database> 

मैं बदल रहा है की कोशिश की:

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <propel> 
     <datasources default="project"> 
      <datasource id="project"> 
       <adapter>pgsql</adapter> 
       <connection> 
        <dsn>pgsql:host=###.###.###.###;dbname=database</dsn> 
        <user>USER</user> 
        <password>PASS</password> 
       </connection> 
      </datasource> 
     </datasources> 
    </propel> 
</config> 

मेरे स्कीमा इस की तर्ज पर है बिल्डटाइम-conf <datasource id="testing"> और त्रुटि Unable to find adapter for datasource [testing] में बदल दी गई। तो त्रुटि वास्तविक बिल्डटाइम-conf फ़ाइल (स्कीमा नहीं) में है, जहां तक ​​मैं कह सकता हूं। मैंने सोचा कि शायद प्रोपेल PostgreSQL के एडाप्टर को नहीं ढूंढ सका (भले ही यह मेरे रनटाइम-कॉन्फ में ठीक काम करता है), इसलिए मैंने अपने एडाप्टर को mysql पर बदलने की कोशिश की। यह एडाप्टर त्रुटि खोजने में असमर्थ के साथ आया था।

मैं पूरी तरह खो गया हूं, विचार?

अद्यतन: तो मैं /Propel/runtime/lib/Propel.php में जाकर लाइन जहां Unable to find adapter अपवाद उत्पन्न हुआ था पता लगाने में सक्षम था। मैंने मैन्युअल रूप से लाइन self::$configuration['datasources'][$name]['adapter'] = 'pgsql' जोड़कर चर परिभाषित किया है और यह काम करता है। यह स्पष्ट रूप से अभी के लिए उपयोगी नहीं है, क्योंकि मैं इस परिवर्तन को फिर से किए बिना प्रोपेल को अपडेट नहीं कर पाऊंगा। मैंने Propel.php में self::$configuration डंप किया और यह NULL है, कोई विचार क्यों?

self::$configuration['datasources'][$name]['adapter'] = 'mysql';

निम्नलिखित त्रुटि में परिणाम:

Indirect modification of overloaded element of PropelConfiguration has no effect

है कि

+0

आप किस संस्करण को चल रहे हैं? यदि यह 1.6 है, तो यह अभी भी समर्थन में है - मैं एक बग फाइल करता हूं। ऐसा लगता है कि माइग्रेशन सामान कनेक्शन शुरू नहीं कर रहा है, हालांकि मैं वास्तव में आंतरिक रूप से नहीं जानता हूं। साथ ही, यदि आप एक पूर्ण schema.xml और build.properties को ज़िप करना चाहते हैं, तो मैं आपकी मशीन पर माइग्रेशन आज़माउंगा यदि आप चाहें (अभी तक कोशिश नहीं की है, लेकिन इसके आसपास जाने के लिए अर्थ रखें!)। – halfer

उत्तर

3

ऐसा लगता है कि एक संगीतकार निर्भरता को dev-master पर स्विच करने की तरह लगता है - यह लिखने के समय वर्तमान रिलीज (1.7.1) और मास्टर के बीच 20 commits difference है। माइग्रेशन पैच विशेष रूप से is here

उम्मीद है कि 1.7.2 रिलीज निश्चित रूप से किया जाएगा, हालांकि यह ध्यान दिया जाना चाहिए कि टीम के विकास प्रयास को वर्तमान में प्रोपेल 2 पर अभी भी ध्यान दिया जाएगा (अभी भी अल्फा में)।

+0

लोगों को @ हेलफर को जानने के लिए वापस आने के लिए बहुत बढ़िया, अच्छा खोज और धन्यवाद। सालों बाद और उन्हें साधारण बग मिला, अनुमान लगाया कि बहुत से लोग pgsql का उपयोग नहीं करते हैं ... – Sam

+1

कोई जांच @ सैम, मुझे एक ही समस्या का सामना करना पड़ा। मुझे माइग्रेशन के साथ कुछ निराशाजनक गेटचा का सामना करना पड़ा है, लेकिन यह जानना मुश्किल है कि अपस्ट्रीम फिक्सेस की पेशकश करने में कितना प्रयास करना है। ऐसा लगता है कि कम से कम अप्रैल 2014 के बाद से कई पीआर इंतजार कर रहे हैं, लेकिन पिछले लीड देव [उन्हें धीरे-धीरे मर्ज करने के लिए दिमाग में था] (https://github.com/propelorm/Propel/issues/859#issuecomment-39421396) स्थिरता के कारणों के लिए। – halfer

2

प्रोपेल के नवीनतम स्थिर संस्करण में (1.7.1) यह inpossible निम्नलिखित कोड जोड़ने के लिए है क्यों, यदि आपके पास केवल एक एडाप्टर है जिसका उपयोग आप कर सकते हैं:

/* 
if (!isset(self::$configuration['datasources'][$name]['adapter'])) { 
    throw new PropelException("Unable to find adapter for datasource [" . $name . "]."); 
} 
*/ 
$db = DBAdapter::factory('mysql'); 
// register the adapter for this name 
self::$adapterMap[$name] = $db; 

यह त्रुटि केवल ./propel-gen diff का उपयोग करते समय होती है। अभी भी बहुत अजीब है। आशा है कि वे जल्द ही इसे ठीक करेंगे।

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