0

ブート時に Grails アプリに管理者ユーザーを追加する方法を知りたいです。

シナリオ:私は Grails アプリケーションを開発し、適切なユーザー権限を持っています (Grails に実装されています)。サーバーにアプリをデプロイしたら、最初に行うべきことは、管理者ユーザーを作成することです。私の質問はそれを行う方法ですか?今のところ、手の込んだ「インストール」は必要ありません。

私の考え:チェックと管理の作成コードをブートストラップに入れることを考えました。サンプル コードは次のとおりです。

def admin = User.findByLogin("admin")
if (!admin) {
   admin = new User(login:"admin", name:"Administrator", password:"password")
   admin.save()
}

ただし、Eclipseでアプリを実行するたびに、何もできません。つまり、エラーも動きもまったくありません。アプリケーションは正常に動作しますが、ブートストラップが完全にスキップされているようです。

質問は、最初の実行時または起動時に Grails アプリを介して管理者ユーザーを追加するにはどうすればよいですか? ブートストラップを使用する必要がある場合、上記のコードの問題は何ですか?

4

2 に答える 2

1

このコードを試してください:

def admin = User.findByLogin("admin")
if (!admin) {
   admin = new User(login:"admin", name:"Administrator", password:"password")
   admin.save(failOnError:true)
}

フラグfailOnErrorは、検証エラーが原因で保存が失敗した場合に grails に強制的に例外をスローさせます。このフラグがないと、grails はインスタンスを黙って保存しません。

于 2013-01-29T08:52:38.000 に答える
1

save()呼び出しが検証に失敗している可能性が最も高いです。admin.save()と置き換えます

if (!admin.save()) {
    println "Failed to save admin due to errors: $admin.errors"
}

または、何が起こっているのかを示すために似たようなもの。また、このコードの前に別の println を追加して、コードが確実に実行されるようにします。コードに重大なエラーがある可能性があります。

grails clean一般に、動作するはずのコードが動作しないときに実行するのが最善です。完全な再コンパイルを強制し、多くの場合、奇妙な動作がなくなります。

于 2013-01-28T23:17:40.423 に答える