2010-09-27 9 views
6

मैं तैनात WAR फ़ाइल के बाहर बाहरी कॉन्फ़िगरेशन फ़ाइलों (* .groovy और * .properties) को लोड करने के लिए Grails के अंतर्निर्मित तंत्र का उपयोग करने का प्रयास कर रहा हूं। दस्तावेज़ीकरण का तात्पर्य यह grails.config.locations उचित classpath: या file: पथों के साथ सेट करने का मामला है।grails/बाहरी विन्यास/grails.config.locations - पूर्ण पथ फ़ाइल "मौजूद नहीं है"?

मैं साथ Config.groovy कॉन्फ़िगर कर दिया है:,

String externalConfigLocation = System.getProperty("SYSTEM_PROPERTY_KEY") 
if (!grails.config.locations || !(grails.config.locations instanceof List)) { 
    grails.config.locations = []  
} 
if (classpathExternalConfigLocation) { 
    String pathToResource = "\"file:${basedir}" + File.separator + externalConfigLocation+"\"" 

    print "Loading external configuration file: ${pathToResource}\n" 
    grails.config.locations << pathToResource 
} 

हालांकि इस काम नहीं किया है फ़ाइल "मौजूद नहीं है" इससे स्पष्ट है त्रुटि संदेश के साथ। हालांकि, grails.config.locations में संग्रहीत पूर्ण पथ को प्रिंट करने से यह संकेत मिलता है। मैं कुछ संयोजनों की कोशिश की है:

  • classpath:configurationFile.properties
  • file:c:\path_to_file\configurationFile.properties
  • c:\path_to_file\configurationFile.properties

लेकिन इन सभी मामलों फ़ाइल नहीं मिल सकता है।

बहुत अजीब - सलाह दी सराहना की। या डिबग कैसे करें पर सुझाव।

grails.config.locations = ["classpath:${appName}-config.groovy", 
          "file:./${appName}-config.groovy"] 
if (System.properties["${appName}.config.location"]) { 
    grails.config.locations << "file:" + System.properties["${appName}.config.location"] 
} 

यह मैं परियोजना जड़ में एक फ़ाइल डाल गुण अनुकूलित करने के लिए स्थानीय स्तर पर जब विकासशील करने देता है:

उत्तर

13

यह वही है मैं आमतौर पर करते हैं न (फाइल का उपयोग कर: स्थान) और युद्ध के रूप में तैनात किए जाने पर सर्वर के क्लासपाथ में एक फ़ाइल। टॉमकैट का lib फ़ोल्डर अपने क्लासपाथ में है, इसलिए यदि आप टोमकैट का उपयोग कर रहे हैं तो फ़ाइलों को रखने के लिए यह एक अच्छी जगह है। फ़ाइल में ऐप का नाम डालकर आप एक दूसरे पर कदम उठाए बिना एकाधिक कॉन्फ़िगरेशन फाइलें रख सकते हैं।

स्थानीय कॉन्फ़िगरेशन फ़ाइल को svn में अनदेखा करना सुनिश्चित करें: अनदेखा करें या .gitignore ताकि आप इसे स्रोत नियंत्रण में न देख सकें। प्रत्येक डेवलपर के बाद दूसरों को प्रभावित किए बिना अपनी सेटिंग्स (या सिर्फ डिफ़ॉल्ट का उपयोग कर सकते हैं) कर सकते हैं।

डेटाबेस पासवर्ड और अन्य उत्पादन मूल्यों को बाहरी करने का यह एक शानदार तरीका है। ऐप नियोक्ता (आदर्श रूप से डेवलपर नहीं) फ़ाइल और इसकी सामग्री का प्रबंधन करता है और यह स्रोत नियंत्रण में पासवर्ड में जांच से बचाता है। जेएनडीआई आईएमओ का उपयोग करने से काफी बेहतर है।

+0

इसके लिए धन्यवाद। – Alex

+0

चाल grails.config.locations << "classpath:" + classpathExternalConfigLocation का उपयोग करना था और यह सुनिश्चित करने के लिए कि ग्रहण/एसटीएस क्लासपाथ फ़ोल्डर को इंगित कर रहा था, .classpath में फ़ाइल। क्लासपाथ: डीबग करने के लिए संभावित रूप से कठिन है, लेकिन सापेक्ष फ़ाइल पथ के लिए इसके लायक है – Alex

2

मुझे लगता है कि जब युद्ध चल रहा है आप base.dir मिल