eagle icon indicating copy to clipboard operation
eagle copied to clipboard

wire生成wire_gen.go文件报错

Open exqmjmz opened this issue 1 year ago • 5 comments

cmd.zip 上面是我的cmd目录下的文件 在server目录中,执行wire ./... 生成wire_gen.go报错提示

wire: /Users/liangjiaming/code/eagle-demo/cmd/server/wire.go:16:1: inject InitApp: no provider found for *github.com/go-eagle/eagle/pkg/transport/consumer/redis.Server needed by *github.com/go-eagle/eagle/pkg/app.App in provider "newApp" (/Users/liangjiaming/code/eagle-demo/cmd/server/main.go:100:6) wire: eagle-demo/cmd/server: generate failed wire: at least one generate failure

exqmjmz avatar Jan 29 '24 07:01 exqmjmz

我本地执行没有问题,看一下你的eagle版本, 最新版本是 v0.17.0, 如果不是需要升级一下。

❯ eagle -v
eagle version v0.17.0

# 升级
eagle upgrade

另外,光提供cmd目录下的文件是不管用的,很多依赖文件都没有。

qloog avatar Jan 30 '24 00:01 qloog

我本地执行没有问题,看一下你的eagle版本, 最新版本是 v0.17.0, 如果不是需要升级一下。

❯ eagle -v
eagle version v0.17.0

# 升级
eagle upgrade

另外,光提供cmd目录下的文件是不管用的,很多依赖文件都没有。 eagle-demo-copy.zip 这个是整个项目的代码

exqmjmz avatar Jan 30 '24 01:01 exqmjmz

已经找到问题,首先这不是最新创建的项目代码,所以会和模板创建的有所差异。

针对你给的代码,修改如下:

// cmd/server/main.go
// 修改前
func newApp(cfg *eagle.Config, hs *httpSrv.Server, cs *redisMQ.Server) *eagle.App {
	return eagle.New(
		eagle.WithName(cfg.Name),
		eagle.WithVersion(cfg.Version),
		eagle.WithLogger(logger.GetLogger()),
		eagle.WithServer(
			// init HTTP server
			hs,
			// init
			cs,
		),
	)
}

// 修改步骤
// 1. 移除 18 行的
redisMQ "github.com/go-eagle/eagle/pkg/transport/consumer/redis"

// 2. 修改 newApp 如下:
func newApp(cfg *eagle.Config, hs *httpSrv.Server) *eagle.App {
	return eagle.New(
		eagle.WithName(cfg.Name),
		eagle.WithVersion(cfg.Version),
		eagle.WithLogger(logger.GetLogger()),
		eagle.WithServer(
			// init HTTP server
			hs,
		),
	)
}

然后重新运行 wire 即可。

qloog avatar Jan 30 '24 07:01 qloog

已经找到问题,首先这不是最新创建的项目代码,所以会和模板创建的有所差异。

针对你给的代码,修改如下:

// cmd/server/main.go
// 修改前
func newApp(cfg *eagle.Config, hs *httpSrv.Server, cs *redisMQ.Server) *eagle.App {
	return eagle.New(
		eagle.WithName(cfg.Name),
		eagle.WithVersion(cfg.Version),
		eagle.WithLogger(logger.GetLogger()),
		eagle.WithServer(
			// init HTTP server
			hs,
			// init
			cs,
		),
	)
}

// 修改步骤
// 1. 移除 18 行的
redisMQ "github.com/go-eagle/eagle/pkg/transport/consumer/redis"

// 2. 修改 newApp 如下:
func newApp(cfg *eagle.Config, hs *httpSrv.Server) *eagle.App {
	return eagle.New(
		eagle.WithName(cfg.Name),
		eagle.WithVersion(cfg.Version),
		eagle.WithLogger(logger.GetLogger()),
		eagle.WithServer(
			// init HTTP server
			hs,
		),
	)
}

然后重新运行 wire 即可。

移除后,没办法既是server端又是consumer,导则asynq那边的任务队列,没法执行了,一直都是pending状态 我是想实现单体程序架构

exqmjmz avatar Jan 30 '24 08:01 exqmjmz

想放到一个服务里,明白了。目前根据报错提示是缺少一个 redis server 依赖,需要在 internal/server/server.go 里进行注入 NewConsumerServer, 具体如下:

// 修改前
var ProviderSet = wire.NewSet(NewHTTPServer)

// 修改后
var ProviderSet = wire.NewSet(NewHTTPServer, NewConsumerServer)

然后 运行 wire, Well Done. Good Luck.

qloog avatar Jan 30 '24 09:01 qloog