【问题标题】:Adding Administrator user on application boot in Grails在 Grails 中的应用程序启动时添加管理员用户
【发布时间】:2015-09-02 08:37:42
【问题描述】:

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

场景:我开发了 Grails 应用程序并获得了用户权限(在 Grails 中实现)。现在,一旦我在服务器上部署应用程序,它应该做的第一件事就是创建管理员用户。我的问题是怎么做?我现在不需要复杂的“安装”。

我的想法:我想将检查和管理创建代码放在引导程序中,这是一个示例代码:

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

但是,每次我在 Eclipse 中运行应用程序时,它都无法执行任何操作。我的意思是没有错误,根本没有动作。应用程序运行良好,但似乎完全跳过了引导程序。

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

【问题讨论】:

    标签: grails deployment bootstrapping


    【解决方案1】:

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

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

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

    一般来说,当应该工作的代码不工作时,最好运行grails clean。它会强制进行完全重新编译,并且通常会使奇怪的行为消失。

    【讨论】:

    • 这是我的代码,它不会在控制台中产生任何输出: class BootStrap { def init = { servletContext -> log.error "Hello BootStrap" println "println BootStrap" } def destroy = { } }
    • 我想通了。 1.应用程序在启动后加载了一段时间。可能是由于项目中的插件很少。 2. Quartz 启动后看不到太多(大量日志)。
    【解决方案2】:

    试试这个代码:

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

    标志failOnError强制grails在由于验证错误导致保存不成功时抛出异常,没有这个标志grails将不会静默保存实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-15
      • 2013-12-13
      • 2021-06-29
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多