在Grails中的应用程序启动时添加管理员用户

时间:2013-01-28 23:13:54

标签: grails deployment bootstrapping

我想知道如何在启动时将管理员用户添加到Grails应用程序。

场景:我开发了Grails应用程序并具有用户权限(在Grails中实现)。现在,一旦我在服务器上部署应用程序,它应该做的第一件事就是创建管理员用户。我的问题是如何做到这一点?我现在不需要精心设计的“安装”。

我的想法:我想把检查和管理员创建代码放在bootstrap中,这是一个示例代码:

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

然而,每当我在eclipse中运行应用程序时,它都无法执行任何操作。我的意思是没有错误,根本没有动静。应用程序运行正常,但似乎完全跳过bootstrap。

问题是如何在首次运行或启动时通过Grails应用添加管理员用户? 如果我需要使用引导程序,我的上述代码有什么问题?

2 个答案:

答案 0 :(得分:1)

save()调用很可能无法验证。将admin.save()替换为

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

或类似的东西,以了解正在发生的事情。另外在此代码之前添加另一个println以确保代码运行 - 您可能在代码中出现更严重的错误。

一般情况下,当应该工作的代码没有时,最好运行grails clean。它强制完全重新编译,并且经常会使奇怪的行为消失。

答案 1 :(得分:1)

试试这段代码:

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

如果由于验证错误导致保存失败,则标志 failOnError 强制grails抛出异常,如果没有此标志,grails将无法以静默方式保存实例。