处理bolt.diy 安装过程遇到的Error: write EPIPE

bolt.new 试用了一下,生成的vue3项目的工程能力还可以接受,但就是有使用限额。于是打算自己部署bolt.diy这个开源版本搭配DEEPSEEK来使用。

按文档操作,
https://stackblitz-labs.github.io/bolt.diy/
 

但在  pnpm run dev 这一步遇到问题了:

Error: write EPIPE
    at __node_internal_captureLargerStackTrace (node:internal/errors:563:5)
    at __node_internal_errnoException (node:internal/errors:690:12)
    at afterWriteDispatched (node:internal/stream_base_commons:160:15)
    at writeGeneric (node:internal/stream_base_commons:151:3)
    at Socket._writeGeneric (node:net:952:11)
    at Socket._write (node:net:964:8)
    at writeOrBuffer (node:internal/streams/writable:556:12)
    at _write (node:internal/streams/writable:490:10)
    at Socket.Writable.write (node:internal/streams/writable:494:10)
    at Runtime.updateConfig (/mnt/vm/project/bolt.diy/node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/src/runtime/index.ts:154:24)
    at Miniflare2.#assembleAndUpdateConfig (/mnt/vm/project/bolt.diy/node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/src/index.ts:1408:28)
    at Mutex.runWith (/mnt/vm/project/bolt.diy/node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/src/workers/shared/sync.ts:66:45)
    at Miniflare2.#waitForReady (/mnt/vm/project/bolt.diy/node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/src/index.ts:1496:3)
    at Miniflare2._getProxyClient (/mnt/vm/project/bolt.diy/node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/src/index.ts:1702:3)
    at Miniflare2.getBindings (/mnt/vm/project/bolt.diy/node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/src/index.ts:1725:23)
    at getPlatformProxy (/mnt/vm/project/bolt.diy/node_modules/.pnpm/wrangler@3.112.0_@cloudflare+workers-types@4.20250303.0/node_modules/wrangler/wrangler-dist/cli.js:157855:20)
    at configureServer (/mnt/vm/project/bolt.diy/node_modules/.pnpm/@remix-run+dev@2.16.0_@remix-run+react@2.16.0_sass-embedded@1.85.1_typescript@5.8.2_vite@5.4.14_wrangler@3.112.0/node_modules/@remix-run/dev/dist/vite/cloudflare-proxy-plugin.js:55:11)
    at _createServer (file:///mnt/vm/project/bolt.diy/node_modules/.pnpm/vite@5.4.14_sass-embedded@1.85.1/node_modules/vite/dist/node/chunks/dep-CHZK6zbr.js:63230:20)
    at configResolved (/mnt/vm/project/bolt.diy/node_modules/.pnpm/@remix-run+dev@2.16.0_@remix-run+react@2.16.0_sass-embedded@1.85.1_typescript@5.8.2_vite@5.4.14_wrangler@3.112.0/node_modules/@remix-run/dev/dist/vite/plugin.js:770:27)
    at async Promise.all (index 3)
    at resolveConfig (file:///mnt/vm/project/bolt.diy/node_modules/.pnpm/vite@5.4.14_sass-embedded@1.85.1/node_modules/vite/dist/node/chunks/dep-CHZK6zbr.js:66579:3)
    at _createServer (file:///mnt/vm/project/bolt.diy/node_modules/.pnpm/vite@5.4.14_sass-embedded@1.85.1/node_modules/vite/dist/node/chunks/dep-CHZK6zbr.js:62908:18)
    at dev (/mnt/vm/project/bolt.diy/node_modules/.pnpm/@remix-run+dev@2.16.0_@remix-run+react@2.16.0_sass-embedded@1.85.1_typescript@5.8.2_vite@5.4.14_wrangler@3.112.0/node_modules/@remix-run/dev/dist/vite/dev.js:39:16)
    at Object.viteDev (/mnt/vm/project/bolt.diy/node_modules/.pnpm/@remix-run+dev@2.16.0_@remix-run+react@2.16.0_sass-embedded@1.85.1_typescript@5.8.2_vite@5.4.14_wrangler@3.112.0/node_modules/@remix-run/dev/dist/cli/commands.js:221:3)
    at Object.run (/mnt/vm/project/bolt.diy/node_modules/.pnpm/@remix-run+dev@2.16.0_@remix-run+react@2.16.0_sass-embedded@1.85.1_typescript@5.8.2_vite@5.4.14_wrangler@3.112.0/node_modules/@remix-run/dev/dist/cli/run.js:271:7) {
  errno: -32,
  code: 'EPIPE',
  syscall: 'write'
}
 ELIFECYCLE  Command failed with exit code 1.

 

strace 看到的信息没有帮助

22773 access("node:internal/streams/writable", F_OK) = -1 ENOENT (No such file or directory)
22773 access("node:internal/stream_base_commons", F_OK) = -1 ENOENT (No such file or directory)
22773 close(42<socket:[147003]>)        = 0
22773 write(26</dev/pts/3>, "Error: write EPIPE\n\33[90m    at __node_internal_captureLargerStackTrace (node:internal/errors:563:5)\33[39m\n\33[90m    at __node_inte"..., 4078) = 4078
22773 kill(22854, SIGKILL)   

于是在代码中加一行输出,看它到底执行了什么?

 9213 var Runtime = class {
 9214   #process;
 9215   #processExitPromise;
 9216   async updateConfig(configBuffer, options) {
 9217     await this.dispose();
 9218     const command = getRuntimeCommand();
 9219     const args = getRuntimeArgs(options);
 9220       console.log("command: ", command, "args: ", args);   <------------
 9221     const FORCE_COLOR2 = $.enabled ? "1" : "0";
 NORMAL  stable | node_modules/.pnpm/miniflare@3.20250214.2/node_modules/miniflare/dist/src/index.js 

看到输出如下:

command:  /mnt/vm/project/bolt.diy/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20250214.0/node_modules/@cloudflare/workerd-linux-64/bin/workerd args:  [
  'serve',
  '--binary',
  '--experimental',
  '--socket-addr=entry=127.0.0.1:0',
  '--external-addr=loopback=127.0.0.1:42387',
  '--control-fd=3',
  '-'
]

于是手工运行一下命令:/mnt/vm/project/bolt.diy/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20250214.0/node_modules/@cloudflare/workerd-linux-64/bin/workerd

运行失败退出,但看到了 /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /mnt/vm/project/bolt.diy/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20250214.0/node_modules/@cloudflare/workerd-linux-64/bin/workerd)
有个疑问,我的操作系统不至于没有包含这个版本号的GLIBC吧?

运行命令:ldd --version
ldd (Debian GLIBC 2.28.21-1+deepin-1) 2.28
好家伙,发现deepin20.9的GLIBC版本是定制的,搞不懂 deepin 为什么自己要定制一个版本号,上次安装的 LocalSend 运行不起来也是因为这个glibc定制版本号的问题导致

找到问题后,在deepint系统下我不可能去换它底层的glibc,只能选择用docker 运行 bolt.diy了

Exception in thread "ioGameThread-3" Exception in thread "ioGameThread-5" Exception in thread "ioGameThread-4" Exception in thread "ioGameThread-6" Exception in thread "ioGameThread-7" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.mail.action.MailAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.mail.MailLogicServer.createBarSkeleton(MailLogicServer.java:46) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.map.action.MapAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.map.MapLogicServer.createBarSkeleton(MapLogicServer.java:44) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.level.action.LevelAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.level.LevelLogicServer.createBarSkeleton(LevelLogicServer.java:44) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.bag.action.ItemAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.bag.BagLogicServer.createBarSkeleton(BagLogicServer.java:44) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.person.action.PersonAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.person.PersonLogicServer.createBarSkeleton(PersonLogicServer.java:39) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Exception in thread "ioGameThread-8" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.pet.action.PetAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.pet.PetLogicServer.createBarSkeleton(PetLogicServer.java:39) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Exception in thread "ioGameThread-12" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.gift.action.GiftBagAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.gift.GiftLogicServer.createBarSkeleton(GiftLogicServer.java:39) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Exception in thread "ioGameThread-9" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.equip.action.EquipAction' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1249) at com.iohao.game.action.skeleton.ext.spring.ActionFactoryBeanForSpring.getBean(ActionFactoryBeanForSpring.java:59) at com.iohao.game.action.skeleton.core.DependencyInjectionPart.getBean(DependencyInjectionPart.java:72) at com.iohao.game.action.skeleton.core.ActionCommandParser.ofActionInstance(ActionCommandParser.java:300) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:100) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.equip.EquipLogicServer.createBarSkeleton(EquipLogicServer.java:48) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) Exception in thread "ioGameThread-2" com.iohao.game.common.kit.exception.CommonRuntimeException: [action 方法重名] 同一个类中相同的 action 方法名只允许存在一个,建议与路由同名。 09:57:33.930 [ioGameThread-1] [] INFO CommonStdout.extractedLog(BrokerServer.java:113) 游戏网关(Broker) port:[10200] - 启动模式:[单机模式] 09:57:33.931 [ioGameThread-11] [] INFO CommonStdout.createMicroBootstrap(DefaultExternalCore.java:71) 游戏对外服 port: [10101] - 连接方式: [TCP] 09:57:33.931 [ioGameThread-10] [] INFO CommonStdout.createMicroBootstrap(DefaultExternalCore.java:71) 游戏对外服 port: [10100] - 连接方式: [WebSocket] see-1 : [cmd:1 - subCmd:1 - cmdMerge:65537] - class com.iohao.mmo.login.action.UserLoginAction.loginVerify(UserLoginAction.java:1) see-2 : [cmd:1 - subCmd:1 - cmdMerge:65537] - class com.iohao.mmo.login.action.UserLoginAction.loginVerify(UserLoginAction.java:1) at com.iohao.game.common.kit.exception.ThrowKit.ofRuntimeException(ThrowKit.java:41) at com.iohao.game.action.skeleton.toy.IoGameBanner.ofRuntimeException(IoGameBanner.java:101) at com.iohao.game.action.skeleton.core.ActionCommandParser.checkSoleActionName(ActionCommandParser.java:290) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$0(ActionCommandParser.java:105) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.lambda$buildAction$1(ActionCommandParser.java:103) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1715) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.iohao.game.action.skeleton.core.ActionCommandParser.buildAction(ActionCommandParser.java:87) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.extractedActionCommand(BarSkeletonBuilder.java:206) at com.iohao.game.action.skeleton.core.BarSkeletonBuilder.build(BarSkeletonBuilder.java:127) at com.iohao.mmo.login.LoginLogicServer.createBarSkeleton(LoginLogicServer.java:39) at com.iohao.game.bolt.broker.client.AbstractBrokerClientStartup.initConfig(AbstractBrokerClientStartup.java:109) at com.iohao.game.bolt.broker.client.BrokerClientApplication.start(BrokerClientApplication.java:46) at com.iohao.game.external.core.netty.simple.InternalRunOne.lambda$startupLogic$0(InternalRunOne.java:62) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583)
最新发布
11-15
你遇到的错误日志非常典型,结合了 **Spring Bean 注入失败** 和 **ioGame 框架路由冲突** 两大问题。我们来逐条分析并提供解决方案。 --- ## 🔍 总体问题分类 你的日志中出现了两类异常: ### ❌ 1. `NoSuchBeanDefinitionException`:Spring 找不到对应的 Action Bean ```text org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.iohao.mmo.mail.action.MailAction' available ``` ### ❌ 2. `CommonRuntimeException: [action 方法重名]`:ioGame 路由方法命名冲突 ```text 同一个类中相同的 action 方法名只允许存在一个,建议与路由同名。 see-1 : [cmd:1 - subCmd:1 - cmdMerge:65537] - class com.iohao.mmo.login.action.UserLoginAction.loginVerify(...) see-2 : [cmd:1 - subCmd:1 - cmdMerge:65537] - class com.iohao.mmo.login.action.UserLoginAction.loginVerify(...) ``` --- # ✅ 一、解决 `NoSuchBeanDefinitionException` —— 让 Spring 正确注册 Action 类 ## 📌 原因分析 ioGame 框架通过 `ActionFactoryBeanForSpring.getBean()` 从 Spring 容器中获取 `MailAction`, `MapAction`, `PetAction` 等业务逻辑类。 但这些类没有被 Spring 成功注册为 Bean → 导致 `getBean()` 抛出 `NoSuchBeanDefinitionException`。 --- ## ✅ 解决方案:确保所有 `Action` 类都被 Spring 扫描到并注册为 Bean ### ✅ 步骤 1:检查每个 `Action` 类是否添加了组件注解 例如: ```java // com/iohao/mmo/mail/action/MailAction.java @Component public class MailAction { public void sendMail(...) { ... } } ``` > ⚠️ 必须是 `@Component` 或其衍生注解(如 `@Service`),否则不会被注册! --- ### ✅ 步骤 2:主启动类必须能扫描到所有模块包 假设你的项目结构如下: ``` com.iohao.game.one.MainApplication ← 启动类 com.iohao.mmo.login.action.UserLoginAction com.iohao.mmo.mail.action.MailAction com.iohao.mmo.pet.action.PetAction ... ``` #### ❌ 错误写法(只扫自己): ```java @SpringBootApplication public class MainApplication { // 只会扫描 com.iohao.game.one 及子包 } ``` #### ✅ 正确写法:显式指定根包 ```java @SpringBootApplication(scanBasePackages = "com.iohao") public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } } ``` ✅ 这样才能扫描到 `com.iohao.mmo.*` 下的所有 `Action` 类。 --- ### ✅ 步骤 3:验证是否成功注册 Bean(调试用) 添加以下代码查看是否加载: ```java @Component public class BeanChecker implements ApplicationRunner { @Autowired private ApplicationContext context; @Override public void run(ApplicationArguments args) { String[] beans = context.getBeanDefinitionNames(); Arrays.stream(beans) .filter(name -> name.contains("Action") && !name.contains("Controller")) .forEach(System.out::println); } } ``` 你应该能看到输出类似: ``` mailAction petAction equipAction giftBagAction userLoginAction ``` 如果没有,则说明未注册成功。 --- # ✅ 二、解决 `[action 方法重名]` 异常 —— ioGame 路由去重 ## 📌 错误信息解析 ```text [cmd:1 - subCmd:1 - cmdMerge:65537] - class com.iohao.mmo.login.action.UserLoginAction.loginVerify(...) [cmd:1 - subCmd:1 - cmdMerge:65537] - class com.iohao.mmo.login.action.UserLoginAction.loginVerify(...) ``` 👉 表示:**有两个方法映射到了相同的路由 `cmd=1, subCmd=1`**,且都叫 `loginVerify`。 这在 ioGame 中是不允许的,即使参数不同也不行。 --- ## ✅ 解决方案 ### 方案一:删除重复的方法(推荐) 检查 `UserLoginAction.java` 是否有多个 `loginVerify` 方法? ```java public class UserLoginAction { @ActionMethod(cmd = 1, subCmd = 1) public void loginVerify(RequestData data) { ... } @ActionMethod(cmd = 1, subCmd = 1) public void loginVerify(OtherData data) { ... } // ❌ 冲突! } ``` ✅ 删除或重命名其中一个。 --- ### 方案二:使用不同的 `subCmd` 如果你确实需要两个登录逻辑分支,应分配不同子命令: ```java @ActionMethod(cmd = 1, subCmd = 1) public void loginVerify(RequestData data) { ... } @ActionMethod(cmd = 1, subCmd = 2) public void loginQuickVerify(TokenData data) { ... } ``` --- ### 方案三:避免继承导致的“隐藏”冲突 如果父类也有 `@ActionMethod`,子类覆盖时也加了相同注解,可能导致重复注册。 ```java class BaseAction { @ActionMethod(cmd = 1, subCmd = 1) public void loginVerify() {} } @Service class UserLoginAction extends BaseAction { @ActionMethod(cmd = 1, subCmd = 1) // ❌ 不要再加! @Override public void loginVerify() {} } ``` ✅ 子类不要重复添加 `@ActionMethod`,否则会被当成两个独立方法注册。 --- # ✅ 三、补充建议:使用统一规范命名 Action 方法 | 推荐命名 | 说明 | |--------|------| | `sendMail` | 对应发送邮件 | | `equipItem` | 装备物品 | | `openGiftBag` | 开礼包 | | `loginVerify` | 登录验证 | > ✅ 方法名尽量唯一,且与路由一致,避免歧义。 --- # ✅ 四、完整修复流程总结 | 步骤 | 操作 | |------|------| | 1 | 给所有 `xxxAction` 类加上 `@Component` 注解 | | 2 | 主启动类使用 `@SpringBootApplication(scanBasePackages = "com.iohao")` | | 3 | 检查是否有重复的 `@ActionMethod(cmd=x, subCmd=y)` 映射 | | 4 | 删除或修改重复的方法名或路由编号 | | 5 | 添加 `BeanChecker` 验证所有 Action 是否已注册 | | 6 | 重启应用,观察日志是否正常 | --- # ✅ 示例:正确结构 ```java // MailAction.java @Component public class MailAction { public void sendMail(...) { ... } } // PetAction.java @Component public class PetAction { public void summonPet(...) { ... } } // 主启动类 @SpringBootApplication(scanBasePackages = "com.iohao") public class OneApplication { public static void main(String[] args) { SpringApplication.run(OneApplication.class, args); } } ``` --- # ✅ 最终效果 修复后你应该看到: ``` 游戏对外服 port: [10100] - 连接方式: [WebSocket] 游戏网关(Broker) port:[10200] - 启动模式:[单机模式] [INFO] 所有 Action 加载完成,服务正常启动 ``` 不再有任何 `NoSuchBeanDefinitionException` 或 `action 方法重名` 错误。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值