سؤال

تحديث: اعتبارا من Grails 1.3.6 واحد لديه الوصول إلى المجال الكامل من البرامج النصية Gant. من الكأس 1.3.6 ملاحظات الإصدار:

يمكنك الآن تشغيل رسالة نصية واحدة أو أكثر من خط الأوامر باستخدام أمر Run-Scrip

Grails Run-Script [path-to-script-1] [path-to-script-2] ... [path-to-script-n

يعمل هذا حول المشكلة في البرامج النصية Gant حيث لا يمكنك الوصول إلى فئات التطبيقات بشكل مريح لأنها غير متوفرة في ClassPath عندما تبدأ البرامج النصية.


أهلاً بكم،

أنا جديد في استخدام Grails (في مشروع حقيقي) ولدي برنامج نصي لمرة واحدة ، أحتاج إلى تنفيذ ملف يقرأ ملفًا ثم يملأ قاعدة البيانات الخاصة بي.

أردت أن يعمل البرنامج النصي في سياق تطبيق Grails الخاص بي ، لذلك استخدمت أمر Create-Script. أنا أفهم الآن أن هذا يجعله نصًا "Gant". كان السبب في ذلك هو أنني اعتقدت أنه سيسمح لي بالوصول بسهولة إلى جميع حالات Grails Goalain Good ، بحيث أكون قادرًا على فعل شيء مثل هذا بسهولة:

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

هل أتخذ النهج الخاطئ ، أم أن هناك شيئًا أكثر بساطة ، أفعل خطأ؟

أي مساعدة موضع تقدير

هل كانت مفيدة؟

المحلول

لقد قمت بتحديث برنامج Grails Run-Script Gant Script (يشار إليه من قبل جاريد أعلاه) للعمل مع Grails 1.3.5. كنت أقصد القيام بذلك لفترة من الوقت ، لكن هذا السؤال دفعني إلى الوصول إليه أخيرًا).

ما عليك سوى تنزيل البرنامج النصي الموضح في المنشور ، احفظه في دليل "البرامج النصية" الخاصة بك ، ويمكنك بعد ذلك تشغيل البرنامج النصي الرائع الخاص بك لتمهيد البيانات مع:

grails run-script script-path/boostrapMyDataIntoApp.groovy

نصائح أخرى

أعلم أن البرامج النصية مفيدة ، وربما سأحصل على بريد الكراهية حتى اقتراحه ، لكنني قمت فقط بدمج هذا النوع من الأشياء مباشرة في طلبي في الماضي.

لديّ علامة تعيين في تكوين بلدي تشير إلى ما إذا كان ينبغي الحصول على البيانات ، إذا كان الأمر كذلك ، فإن رمز bootstrap يبحث عن ملف محدد فاصلة عند بدء التشغيل واتصال طريقة خدمة لتحميل البيانات.

اضطررت إلى القيام بذلك وعليك إنشاء برنامج نصي خاص للسماح لك بالوصول إلى Gorm من برنامج نصي Grils قياسي. نرى هذا السؤال لمزيد من المعلومات. لست متأكدًا من أن الحالة الحالية للنص تحت Grails 1.3 ولكن مؤلف البرنامج النصي المنشور في التعليقات.

هانز ، هناك العديد من الخيارات هنا ، على افتراض أنك لست خارجًا لتلميع شرائح البرمجة النصية 8^)

لذا افترض أنك تقوم ببعض tdd وضع التكامل ، صحيح؟ هل نظرت إلى المكون الإضافي DB-Stuff؟ في الواقع ، يستفيد المرء من الحزمة المفتوحة المصدر (امتداد مشروع Junit) المسمى DBUnit ، وهو أيضًا خيار رائع ، لكل من مشاريع Java و Groovy.

*DB-STUFF <0.3.0> - إدارة مخطط DB واستيراد/تصدير البيانات. إنشاء ملفات مخطط عام واستيراد أو تصدير بيانات/بذور/اختبار بيانات في قاعدة البيانات الخاصة بك.


لقد فعلت ذلك تقليديًا أيضًا في bootstrap اعتمادًا على البيئة - وأحاول ألا أترك افتراضات / قيود المجال هذه بعيدة جدًا عن التزامن. مع مخططي.

ها هي الشريعة التي أتحدث عنها:

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" )
//...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top