首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >traefik.go:命令traefik错误:未定义: xxx

traefik.go:命令traefik错误:未定义: xxx
EN

Stack Overflow用户
提问于 2022-05-09 22:50:01
回答 1查看 211关注 0票数 0

我正在尝试构建一个Traefik插件,并在基于https://github.com/traefik/plugindemo#local-mode的本地模式下进行测试。

现在这个插件什么也不做,只返回"Hello“。

以下是我的文件结构:

traefik/plugins-local/src/github.com/Hongbo-Miao/traefik-plugin-disable-graphql-introspection文件夹中,我有:

.traefik.yml

代码语言:javascript
复制
entryPoints:
  graphql-server-entrypoint:
    address: :9000
api:
  insecure: true
  dashboard: true
providers:
  file:
    filename: dynamic_conf.yaml
log:
  level: DEBUG
experimental:
  localPlugins:
    traefik-plugin-disable-graphql-introspection:
      modulename: github.com/Hongbo-Miao/traefik-plugin-disable-graphql-introspection

go.mod

代码语言:javascript
复制
module github.com/Hongbo-Miao/traefik-plugin-disable-graphql-introspection

go 1.17

main.go

代码语言:javascript
复制
package main

import (
    "context"
    "net/http"
)

type Config struct{}

func CreateConfig() *Config {
    return &Config{}
}

type DisableGraphQLIntrospection struct {
    next http.Handler
    name string
}

func New(ctx context.Context, next http.Handler, config *Config, name string) (http.Handler, error) {
    return &DisableGraphQLIntrospection{
        next: next,
        name: name,
    }, nil
}

func (a *DisableGraphQLIntrospection) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
    rw.Write([]byte("hello"))
}

在根文件夹中,我有

traefik.yaml

代码语言:javascript
复制
entryPoints:
  graphql-server-entrypoint:
    address: :9000
api:
  insecure: true
  dashboard: true
providers:
  file:
    filename: dynamic_conf.yaml
log:
  level: DEBUG
experimental:
  localPlugins:
    traefik-plugin-disable-graphql-introspection:
      modulename: github.com/Hongbo-Miao/traefik-plugin-disable-graphql-introspection

dynamic_conf.yaml

代码语言:javascript
复制
http:
  routers:
    graphql-server-entrypoint:
      service: graphql-server-service
      entrypoints:
        - graphql-server-entrypoint
      rule: Host(`localhost`)
      middlewares:
        - my-traefik-plugin-disable-graphql-introspection
  services:
    graphql-server-service:
      loadBalancer:
        servers:
          - url: http://localhost:5000/
  middlewares:
    my-traefik-plugin-disable-graphql-introspection:
      plugin:
        traefik-plugin-disable-graphql-introspection:
          headers:
            Foo: Bar

我有一个GraphQL服务器在http://localhost:5000运行

我要它通过Taefik被http://localhost:9000曝光

但是,当我跑的时候

代码语言:javascript
复制
traefik --configfile=traefik.yaml

在根文件夹中,我得到了错误

traefik.go:79:命令traefik错误:未能执行;1:28:未定义: traefik_plugin_disable_graphql_introspection 119

Traefik插件由嵌入式Go解释器叶芝实时执行。

这个错误似乎是由Yaegi造成的,但是,我不知道如何调试。

任何导游都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-11 17:57:48

收到汤姆·穆拉德的答复,谢谢你!https://github.com/traefik/plugindemo/issues/15#issuecomment-1123741949

您的错误意味着Yaegi无法找到New包的traefik_plugin_disable_graphql_introspection函数。因此,您可以看出,Yaegi找到了您的插件,加载了它,但是找不到包。要解决这个问题,您需要将插件代码中的行package main更改为package traefik_plugin_disable_graphql_introspection

在将package main更改为main.go文件中的package traefik_plugin_disable_graphql_introspection之后,它现在开始工作了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72178972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档