最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 无法从 gqlgen-sqlboiler 生成 generated_sort.go

    无法从 gqlgen-sqlboiler 生成 generated_sort.go

    php小编新一提到,有时候在使用gqlgen-sqlboiler生成器时,可能会遇到无法生成generated_sort.go文件的问题。这个问题可能是由于配置或者依赖关系的错误导致的。在解决这个问题之前,我们需要仔细检查配置文件和相关依赖,确保没有遗漏或者错误。同时,我们也可以尝试更新生成器和相关库的版本,以解决可能存在的bug。如果问题仍然存在,我们可以寻求社区的帮助,看看是否有其他人遇到了相同的问题,并且找到了解决办法。总之,解决这个问题需要耐心和细心,通过排查和尝试不同的解决方案,我们有望找到有效的解决方法。

    问题内容

    我正在使用
    sqlboiler版本:v4.14.2
    gqlgen版本:v0.17.33
    gqlgen-sqlboiler 版本:v3.3.12
    https://github.com/web-ridge/gqlgen-sqlboiler

    遵循 readme.md 先决条件后,在运行 convert.go 时出现以下错误
    以下是convert.go

    package main
    
    import (
        "github.com/99designs/gqlgen/codegen/config"
        "github.com/rs/zerolog/log"
        gbgen "github.com/web-ridge/gqlgen-sqlboiler/v3"
        "github.com/web-ridge/gqlgen-sqlboiler/v3/cache"
        "github.com/web-ridge/gqlgen-sqlboiler/v3/structs"
        "os"
        "os/exec"
        "strings"
    )
    
    func main() {
        // change working directory to parent directory where all configs are located
        newdir, _ := os.getwd()
        os.chdir(strings.trimsuffix(newdir, "/convert"))
    
        enablesoftdeletes := true
        boilerargs := []string{"mysql", "--no-back-referencing", "--wipe", "-d"}
        if enablesoftdeletes {
            boilerargs = append(boilerargs, "--add-soft-deletes")
        }
        cmd := exec.command("sqlboiler", boilerargs...)
    
        err := cmd.run()
        if err != nil {
            log.fatal().err(err).str("command", cmd.string()).msg("error generating dm models running sql-boiler")
        }
    
        output := structs.config{
            directory:   "helpers", // supports root or sub directories
            packagename: "helpers",
        }
        backend := structs.config{
            directory:   "models",
            packagename: "models",
        }
        frontend := structs.config{
            directory:   "models",
            packagename: "models",
        }
    
        boilercache := cache.initializeboilercache(backend)
    
        generateschema := true
        generatedschema := !generateschema
        if generateschema {
            if err := gbgen.schemawrite(
                gbgen.schemaconfig{
                    boilercache:         boilercache,
                    directives:          []string{"isauthenticated"},
                    skipinputfields:     []string{"createdat", "updatedat", "deletedat"},
                    generatemutations:   true,
                    generatebatchcreate: false,
                    generatebatchdelete: false,
                    generatebatchupdate: false,
                    hookshouldaddmodel: func(model gbgen.schemamodel) bool {
                        if model.name == "config" {
                            return false
                        }
                        return true
                    },
                    hookchangefields: func(model *gbgen.schemamodel, fields []*gbgen.schemafield, parentype gbgen.parenttype) []*gbgen.schemafield {
                        //profile: userpayload! @isauthenticated
    
                        return fields
                    },
                    hookchangefield: func(model *gbgen.schemamodel, field *gbgen.schemafield) {
                        //"userid", "userorganizationid",
                        if field.name == "userid" && model.name != "useruserorganization" {
                            field.skipinput = true
                        }
                        if field.name == "userorganizationid" && model.name != "useruserorganization" {
                            field.skipinput = true
                        }
                    },
                },
                "../schema.graphql",
                gbgen.schemagenerateconfig{
                    mergeschema: false,
                },
            ); err != nil {
                log.fatal().err(err).msg("error generating schema")
            }
            generatedschema = true
        }
        if generatedschema {
    
            cfg, err := config.loadconfigfromdefaultlocations()
            if err != nil {
                log.fatal().err(err).msg("error loading config")
            }
    
            data, err := gbgen.newmodelplugin().generatecode(cfg)
            if err != nil {
                log.fatal().err(err).msg("error generating graphql models using gqlgen")
            }
    
            modelcache := cache.initializemodelcache(cfg, boilercache, output, backend, frontend)
    
            if err := gbgen.newconvertplugin(
                modelcache,
                gbgen.convertpluginconfig{
                    databasedriver: gbgen.mysql,
                    //searchable: {
                    //  company: {
                    //      column: dm.companycolumns.name
                    //  },
                    //},
                },
            ).generatecode(); err != nil {
                log.fatal().err(err).msg("error while generating convert/filters")
            }
    
            if err := gbgen.newresolverplugin(
                config.resolverconfig{
                    filename: "resolvers/all_generated_resolvers.go",
                    package:  "resolvers",
                    type:     "resolver",
                },
                output,
                boilercache,
                modelcache,
                gbgen.resolverpluginconfig{
    
                    enablesoftdeletes: enablesoftdeletes,
                    // authorization scopes can be used to override e.g. userid, organizationid, tenantid
                    // this will be resolved used the provided scoperesolvername if the result of the addtrigger=true
                    // you would need this if you don't want to require these fields in your schema but you want to add them
                    // to the db model.
                    // if you do have these fields in your schema but want them authorized you could use a gqlgen directive
                    authorizationscopes: []*gbgen.authorizationscope{},
                    //  {
                    //      importpath:        "github.com/my-repo/app/backend/auth",
                    //      importalias:       "auth",
                    //      scoperesolvername: "useridfromcontext", // function which is called with the context of the resolver
                    //      boilercolumnname:  "userid",
                    //      addhook: func(model *gbgen.boilermodel, resolver *gbgen.resolver, templatekey string) bool {
                    //          // fmt.println(model.name)
                    //          // fmt.println(templatekey)
                    //          // templatekey contains a unique where the resolver tries to add something
                    //          // e.g.
                    //          // most of the time you can ignore this
    
                    //          // we want the delete call to work for every object we don't want to take in account te user-id here
                    //          if resolver.isdelete {
                    //              return false
                    //          }
    
                    //          var addresolver bool
                    //          for _, field := range model.fields {
                    //              if field.name == "userid" {
                    //                  addresolver = true
                    //              }
                    //          }
                    //          return addresolver
                    //      },
                    //  },
                    //  {
                    //      importpath:        "github.com/my-repo/app/backend/auth",
                    //      importalias:       "auth",
                    //      scoperesolvername: "userorganizationidfromcontext", // function which is called with the context of the resolver
                    //      boilercolumnname:  "userorganizationid",
    
                    //      addhook: func(model *gbgen.boilermodel, resolver *gbgen.resolver, templatekey string) bool {
                    //          // fmt.println(model.name)
                    //          // fmt.println(templatekey)
                    //          // templatekey contains a unique where the resolver tries to add something
                    //          // e.g.
                    //          // most of the time you can ignore this
                    //          var addresolver bool
                    //          for _, field := range model.fields {
                    //              if field.name == "userorganizationid" {
                    //                  addresolver = true
                    //              }
                    //          }
                    //          return addresolver
                    //      },
                    //  },
                    // },
                },
            ).generatecode(data); err != nil {
                log.fatal().err(err).msg("error while generating resolvers")
            }
    
        }
    }

    以下是日志

    go run convert/convert.go
    4:10PM DBG [boiler-cache] building cache
    4:10PM DBG [boiler-cache] built cache!
    4:10PM DBG write GraphQL schema to disk bytes=3918
    file=../schema.graphql
    4:10PM DBG formatting GraphQL schema
    ../schema.graphql 71ms 4:10PM DBG formatted GraphQL schema
    4:10PM DBG [model-cache] get structs
    4:10PM DBG [model-cache] get extra's from schema
    4:10PM DBG [model-cache] enhance structs with information
    4:10PM DBG [model-cache] built cache!
    4:10PM DBG [convert] render generated_convert.gotpl
    4:10PM DBG [convert] rendered generated_convert.gotpl
    4:10PM DBG [convert] render generated_convert_batch.gotpl
    4:10PM DBG [convert] rendered generated_convert_batch.gotpl
    4:10PM DBG [convert] render generated_convert_input.gotpl
    4:10PM DBG [convert] rendered generated_convert_input.gotpl
    4:10PM DBG [convert] render generated_filter.gotpl
    4:10PM DBG [convert] rendered generated_filter.gotpl
    4:10PM DBG [convert] render generated_preload.gotpl
    4:10PM DBG [convert] rendered generated_preload.gotpl
    4:10PM DBG [convert] render generated_sort.gotpl
    4:10PM ERR could not parse golang file error="src.go:1:1: expected
    'package', found 'EOF'"
    4:10PM ERR error while rendering generated_sort.gotpl error="errors
    while writing template to helpers/generated_sort.go writeError: ,
    contentError: execute: template: :44:17: executing "" at
    <$field.Enum.Name>: nil pointer evaluating *structs.Enum.Name,
    importError: helpers/generated_sort.go:1:1: expected 'package', found
    'EOF'"
    4:10PM DBG [convert] rendered generated_sort.gotpl
    4:10PM ERR could not parse golang file error="src.go:1:1: expected
    'package', found 'EOF'"
    4:10PM ERR could not close file error="invalid argument"
    fileName=resolvers/all_generated_resolvers.go
    4:10PM FTL error while generating resolvers error="errors while
    printing template to resolvers/all_generated_resolvers.go  invalid
    argument"
    exit status 1
    

    请帮忙解决这个问题?

    解决方法

    通过映射正确的目录解决了问题。在侧面convert.go
    在convert.go中创建结构时

    //output 代表将从 gqlgen-sqlboiler 生成文件的文件夹

    output := structs.config{
            directory:   "helpers", // supports root or sub directories
            packagename: "helpers",
        }

    //backend是生成所有sqlboiler模型的文件夹

    backend := structs.config{
        directory:   "models",
        packagename: "models",
    }

    //!!!重要的前端是gqlgen生成所有graphql文件的文件夹

    frontend := structs.Config{
        Directory:   "graph",
        PackageName: "graph",
    }

    前端文件夹映射错误。

    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 无法从 gqlgen-sqlboiler 生成 generated_sort.go
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情