2010-12-03 13 views
5

अपडेट: Grails के रूप में 1.3.6 किसी के पास गैंट स्क्रिप्ट से पूर्ण डोमेन तक पहुंच है। Grails से 1.3.6 release notes:डेटाबेस को पॉप्युलेट करने के लिए एक-ऑफ ग्रिल स्क्रिप्ट

अब आप रन-स्क्रिप्ट कमांड का उपयोग करके कमांडलाइन से एक या अधिक ग्रोवी स्क्रिप्ट चला सकते हैं, उदा।

grails रन स्क्रिप्ट [पथ करने वाली स्क्रिप्ट-1] [पथ करने वाली स्क्रिप्ट -2] ... [पथ करने वाली स्क्रिप्ट-एन]

यह Gant लिपियों में समस्या के काम करता है जहां आप आसानी से एप्लिकेशन कक्षाओं तक नहीं पहुंच सकते हैं क्योंकि स्क्रिप्ट शुरू होने पर वे क्लासपाथ में उपलब्ध नहीं हैं।


हाय सब,

मैं Grails का उपयोग कर (एक वास्तविक परियोजना में) करने के लिए नया हूँ और मैं एक बंद स्क्रिप्ट मैं निष्पादित करने के लिए है कि एक फ़ाइल पढ़ता है और फिर मेरे डेटाबेस भरता है की जरूरत है।

मैं चाहता था कि स्क्रिप्ट मेरे grails ऐप के संदर्भ में चलें, इसलिए मैंने create-script कमांड का उपयोग किया। अब मैं समझता हूं कि इसे 'गेंट' स्क्रिप्ट बनाता है। ऐसा करने के लिए कारण मैंने सोचा कि यह मेरे सभी grails डोमेन अच्छा सत्ता के लिए आसान पहुँच की अनुमति होगी, ताकि मैं आसानी से कुछ इस तरह करने में सक्षम हो जाएगा:

Car car = new Car(model: 'bar', brand: 'Ford') 
car.save() 

यहाँ, कार में से एक है मेरे डोमेन वर्ग और तार 'बार' और 'फोर्ड' मैंने अपनी फ़ाइल से पुनर्प्राप्त किया है।

मेरी स्क्रिप्ट के शुरू होने से इस तरह दिखता है:

import com.foo.Car  
grailsHome = Ant.project.properties."environment.GRAILS_HOME" 
includeTargets << new File ("${grailsHome}/scripts/Bootstrap.groovy") 
target(main: "a script for storing cars") { 
    depends(bootstrap, classpath) // code dealing with the file with cars follows 

हैरानी की बात है, ग्रूवी मुझे एक java.lang.NoClassDefFoundError: com.foo.Car देता है जब मैं आदेश grails LoadCars

मैं गलत दृष्टिकोण ले जा रहा हूँ के साथ स्क्रिप्ट को निष्पादित, या नहीं है कुछ और आसान मैं गलत कर रहा हूँ?

किसी भी मदद

उत्तर

2

मैंने grails 1.3.5 के साथ काम करने के लिए grails run-script Gant script (ऊपर जेरेड द्वारा संदर्भित) को अद्यतन किया है। मैं थोड़ी देर के लिए ऐसा करने का मतलब था, लेकिन इस सवाल ने मुझे अंततः इसके आसपास घूमने के लिए प्रेरित किया)।

बस स्क्रिप्ट पोस्ट में वर्णित डाउनलोड करें, अपने grails "स्क्रिप्ट" निर्देशिका में सहेजें और आप तो साथ डेटा bootstrap करने के लिए अपनी खुद की ग्रूवी स्क्रिप्ट चला सकते हैं:

grails run-script script-path/boostrapMyDataIntoApp.groovy 
+0

धन्यवाद एक गुच्छा टेड:

यहाँ कैनन के बारे में मैं बात कर रहा हूँ है! –

1

मैं यह करने के लिया है की सराहना की है और आप आप एक मानक grails स्क्रिप्ट से GORM का उपयोग करने की अनुमति देने के लिए एक विशेष स्क्रिप्ट बनाने के लिए किया है। अधिक जानकारी के लिए this question देखें। मुझे यकीन नहीं है कि लिपि की वर्तमान स्थिति क्या है, लेकिन 1.3 में लिपि के लेखक टिप्पणी में पोस्ट किए गए हैं।

6

मुझे पता है कि स्क्रिप्ट उपयोगी हैं, और मुझे शायद यह सुझाव देने के लिए नफरत मेल भी मिलेगा, लेकिन मैंने अभी भी इस तरह की सामग्री को अतीत में सीधे अपने आवेदन में शामिल किया है।

मेरे पास मेरी कॉन्फ़िगरेशन में एक ध्वज सेट है जो इंगित करता है कि डेटा बूटस्ट्रैप किया जाना चाहिए, यदि ऐसा है, तो बूटस्ट्रैप कोड स्टार्टअप पर अल्पविराम सीमांकित फ़ाइल ढूंढता है और डेटा लोड करने के लिए सेवा विधि को कॉल करता है।

1

हंस, वहाँ कई विकल्प यहाँ हैं , मानते हैं कि आप GANT स्क्रिप्टिंग चॉप को पॉलिश करने के लिए बाहर नहीं हैं 8 ^)

तो मान लीजिए कि आप कुछ एकीकरण-मोड टीडीडी कर रहे हैं, सही? क्या आपने डीबी-स्टफ प्लगइन में देखा है? दरअसल, वह जावा और ग्रोवी परियोजनाओं दोनों के लिए ओपन सोर्स पैकेज (जुनीट प्रोजेक्ट का विस्तार) नामक डीबीयूनीट कहलाता है, जो कि एक उत्कृष्ट विकल्प भी है।

* db-stuff < 0.3.0> - डीबी स्कीमा प्रबंधन और डेटा आयात/निर्यात। जेनेरिक स्कीमा फाइलें जेनरेट करें और अपने डेटाबेस में बेस/बीज/टेस्ट डेटा आयात या निर्यात करें।


मैं पारंपरिक रूप से पर्यावरण के आधार पर बूटस्ट्रैप के साथ-साथ यह किया है - और मैं कभी नहीं करने के लिए उन डोमेन मान्यताओं/कमी सिंक से बाहर बहुत दूर पाने के लिए प्रयास करें। मेरी स्कीमा के साथ।

class BootStrap { 

    def init = { servletContext -> 
     if (GrailsUtil.environment.equals(GrailsApplication.ENV_DEVELOPMENT)) { 
      log.info("Loading sample data for 2010 models...");    

      new Car(manufacturer: new Manufacturer(name: "Toyota"), model: "Prius") 
      new Car(manufacturer: new Manufacturer(name: "GM"), model: "Volt") 
//... 
+0

हाय माइक, मैं एकीकरण परीक्षण नहीं कर रहा हूं, बस मुझे दी गई फाइल से रिकॉर्ड्स का एक गुच्छा डालने का प्रयास कर रहा हूं। वैसे भी बूटस्ट्रैप हुक भी उपयोगी हो सकता है और डीबी-स्टफ प्लगइन को इंगित करने के लिए धन्यवाद। –

+0

गोटा ... समझें कि निर्यात/निर्यात करने के लिए XML प्रारूप dbunit उपयोगों के विकल्प हैं। Http://www.dbunit.org/apidocs/org/dbunit/dataset/excel/XlsDataSet.html और http://dbunit.wikidot.com/demoimportexport देखें यदि फ़ाइल प्रारूप में हैं Excel Excel पढ़ सकते हैं। – mikesalera

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

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