更新: 从Grails 1.3.6开始,人们可以从Gant脚本访问完整域。来自圣杯 1.3.6发行说明:

现在,您可以使用Run-Script命令从命令行中运行一个或多个Groovy脚本,例如

Grails Run-scrip [path to-script-1] [途径到script-2] ... [途径script-n

这在gant脚本中围绕该问题可行,在该问题中,您无法方便地访问应用程序类,因为脚本启动时在类路径中不可用。


大家好,

我是使用Grails的新手(在一个真实的项目中),并且我需要执行一个读取文件然后填充数据库的一次性脚本。

我希望脚本在Grails应用程序的上下文中运行,因此我使用了Create-Script命令。我现在明白这使它成为一个“ gant”脚本。这样做的原因是,我认为它可以轻松访问所有Grails域好处,以便我能够轻松地做类似的事情:

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

在这里,汽车是我的域类,我从文件中检索到了“ bar”和“福特”。

我的脚本的开始看起来像这样:

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

令人惊讶的是,Groovy给了我一个 java.lang.NoClassDefFoundError: com.foo.Car 当我用命令执行脚本时 grails LoadCars

我是在做错方法,还是我做错了什么简单的事情?

任何帮助都将受到赞赏

有帮助吗?

解决方案

我已经更新了 Grails Run-Script Gant脚本 (上面的Jared提到)与Grails 1.3.5合作。我一直想这样做一段时间,但是这个问题使我终于解决了这个问题。

只需下载帖子中描述的脚本,将其保存在您的Grails“脚本”目录中,然后您可以运行自己的groovy脚本以使用:

grails run-script script-path/boostrapMyDataIntoApp.groovy

其他提示

我知道这些脚本很有用,甚至可能会提出仇恨邮件,但我只是将这种内容直接纳入我的应用程序。

我的配置中有一个标志集,该标志指示是否应引导数据,如果是的,则引导程序代码在启动时寻找一个逗号界限文件,并调用一个服务方法来加载数据。

我必须这样做,您必须创建一个特殊的脚本,以允许您从标准的Grails脚本访问Gorm。看 这个问题 有关更多信息。我不确定脚本的当前状态在Grails 1.3下是什么,但在评论中发布的脚本的作者。

汉斯,这里有几种选择,假设您不愿意抛光脚印脚本8^)

因此,假设您正在做一些集成模式TDD,对吗?您是否查看了DB-STUFF插件?实际上,对于Java和Groovy项目而言,一个名为Dbunit的开源包(JUNIT项目的扩展)也是一个出色的选择。

*db-stuff <0.3.0> - DB模式管理和数据导入/导出。生成通用架构文件,并将基本/种子/测试数据导入或导出到数据库中。


传统上,我在引导程序中也这样做了,具体取决于环境 - 我试图永远不要让这些域名的假设 /约束变得太远了。使用我的模式。

这是我在说的佳能:

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