5

更新: Grails 1.3.6以降、Gantスクリプトから完全なドメインにアクセスできます。Grails 1.3.6リリースノートから:

これで、run-scriptコマンドを使用して、コマンドラインから1つ以上のGroovyスクリプトを実行できます。

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

これは、スクリプトの開始時にクラスパスで使用できないためにアプリケーションクラスに簡単にアクセスできないGantスクリプトの問題を回避します。


こんにちは、みんな、

私は(実際のプロジェクトで)Grailsを使用するのは初めてで、ファイルを読み取ってデータベースにデータを入力する1回限りのスクリプトを実行する必要があります。

grailsアプリのコンテキストでスクリプトを実行したかったので、create-scriptコマンドを使用しました。私は今、それが「ガント」スクリプトになることを理解しています。そうする理由は、すべてのgrailsドメインの良さに簡単にアクセスできるので、次のようなことが簡単にできると思ったからです。

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

ここで、Carは私のドメインクラスの1つであり、ファイルから取得した文字列「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

java.lang.NoClassDefFoundError: com.foo.Car驚いたことに、コマンドを使用してスクリプトを実行すると、groovyが表示されますgrails LoadCars

私は間違ったアプローチを取っていますか、それとも私が間違っているより単純な何かがありますか?

どんな助けでも大歓迎です

4

4 に答える 4

6

私はスクリプトが便利であることを知っています、そして私はおそらくそれを提案するために嫌いなメールを受け取るでしょう、しかし私は過去にこの種のものを私のアプリケーションに直接組み込んだだけです。

構成にフラグを設定して、データをブートストラップする必要があるかどうかを示します。ブートストラップする場合、ブートストラップコードは起動時にコンマ区切りのファイルを探し、サービスメソッドを呼び出してデータをロードします。

于 2010-12-03T19:09:36.637 に答える
2

grails1.3.5で動作するようにgrailsrun-scriptGantスクリプト(上記のJaredで参照)を更​​新しました。私はしばらくそれをするつもりでしたが、この質問は私を最終的にそれを回避するように促しました)。

投稿に記載されているスクリプトをダウンロードし、grailsの「scripts」ディレクトリに保存するだけで、独自のGroovyスクリプトを実行して、次のコマンドでデータをブートストラップできます。

grails run-script script-path/boostrapMyDataIntoApp.groovy
于 2010-12-04T04:48:10.917 に答える
1

私はこれをしなければならず、標準のgrailsスクリプトからGORMにアクセスできるようにするための特別なスクリプトを作成する必要があります。詳細については、この質問を参照してください。スクリプトの現在のステータスがgrails1.3の下にあるかどうかはわかりませんが、スクリプトの作成者がコメントに投稿しています。

于 2010-12-03T18:57:16.253 に答える
1

ハンス、GANTスクリプトチョップを磨くために外出していないと仮定すると、ここにはいくつかの選択肢があります8 ^)

では、統合モードのTDDを実行していると仮定してください。db-stuffプラグインを調べましたか?実際には、JavaプロジェクトとGroovyプロジェクトの両方で、dbUnitと呼ばれるオープンソースパッケージ(JUnitプロジェクトの拡張)を活用しています。これも優れた選択肢です。

* 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" )
//...
于 2010-12-04T19:29:59.093 に答える