簡體   English   中英

用於填充數據庫的一次性grails腳本

[英]one-off grails script for populating database

更新:從Grails 1.3.6開始,可以從Gant腳本訪問完整域。 從Grails 1.3.6發行說明

您現在可以使用run-script命令從命令行運行一個或多個Groovy腳本,例如

grails run-script [path-to-script-1] [path-to-script-2] ... [path-to-script-n]

這解決了Gant腳本中無法方便地訪問應用程序類的問題,因為腳本啟動時它們在類路徑中不可用。


大家好,

我是新手使用Grails(在一個真實的項目中),我有一個我需要執行的一次性腳本,它讀取一個文件,然后填充我的數據庫。

我希望腳本在我的grails應用程序的上下文中運行,所以我使用了create-script命令。 我現在明白這使它成為一個'Gant'腳本。 這樣做的原因是我認為它可以讓我輕松訪問所有grails域的優點,這樣我就可以輕松地做到這樣的事情:

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

在這里,Car是我的一個域類,我從文件中檢索到了字符串'bar'和'Ford'。

我的腳本的開頭看起來像這樣:

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

令人驚訝的是,當我用命令grails LoadCars執行腳本時,groovy給了我一個java.lang.NoClassDefFoundError: com.foo.Car grails LoadCars

我采取了錯誤的方法,還是有一些更簡單的我做錯了?

任何幫助表示贊賞

我知道這些腳本是有用的,我甚至可能會收到討厭的郵件甚至建議它,但我過去只是將這類東西直接加入到我的應用程序中。

我在配置中設置了一個標志,指示數據是否應該被引導,如果是這樣,引導代碼在啟動時查找逗號分隔文件並調用服務方法來加載數據。

我已經更新了grails run-script Gant腳本 (上面提到的Jared)來處理grails 1.3.5。 我一直想做這件事,但這個問題讓我最終開始討論它。

只需下載帖子中描述的腳本,將其保存在grails“scripts”目錄中,然后您可以運行自己的groovy腳本來引導數據:

grails run-script script-path/boostrapMyDataIntoApp.groovy

我必須這樣做,你必須創建一個特殊的腳本,允許你從標准的grails腳本訪問GORM。 有關詳細信息,請參閱此問題 我不確定腳本的當前狀態是在grails 1.3下,但是腳本的作者在評論中發布了。

漢斯,這里有幾個選擇,假設你沒有出去打磨GANT腳本印章8 ^)

所以假設你正在做一些集成模式的TDD,對嗎? 你有沒有看過db-stuff插件? 實際上,人們利用名為dbUnit的開源軟件包(JUnit項目的擴展),這對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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM