按照文档使用EGG_SERVER_ENV=release npm start启动,并未读取config.release.ts文件。在 CI上跑的时候报了如下错误:
连接的是本地的redis,即为开发环境的配置文件。config.release.ts中链接的是阿里云redis数据库的endpoint。
而使用EGG_SERVER_ENV=release npm run dev启动时则读取到config.release.ts,会报错连远端redis timeou了。
按照文档使用EGG_SERVER_ENV=release npm start启动,并未读取config.release.ts文件。在 CI上跑的时候报了如下错误:
连接的是本地的redis,即为开发环境的配置文件。config.release.ts中链接的是阿里云redis数据库的endpoint。
而使用EGG_SERVER_ENV=release npm run dev启动时则读取到config.release.ts,会报错连远端redis timeou了。
为什么不直接用 prod ?
prod环境也有配置,业务需要有多个生产环境。这个本身应该是egg的bug
https://github.com/eggjs/egg-core/blob/77e11f5fb38b3646fb20deb78bbc239b06bf8349/lib/loader/mixin/plugin.js#L157
可以考虑用 scope 这个特性(未正式 document,但我们内部都这么用,跟你场景一样)
我本地试了下,是可以加载的,是不是 tsc 没编译啥的?
提供下最小可复现仓库。
有可能,但我这边tsc编译后会报很多类型错误。这个在之前的版本是没有的。。
没太看懂,这个scope与EGG_SERVER_ENV是相关联的么
这么多报错,你先检查下是不是 config.relase.js 没生成吧。
没太看懂,这个scope与EGG_SERVER_ENV是相关联的么
是它的补充,看 https://github.com/eggjs/egg-core/blob/afa89c1b2ce89a2f8994943905172ee1bab6f77e/test/loader/mixin/load_config.test.js#L169 这个用例
生成倒是生成了。那些报错是在tsc出现的,直接运行npm start就没问题。。另外tsc在原先的版本是可以的,更新 了最新版egg后就出了这问题。
提供最小可复现仓库吧。
经检验是 typescript和全局tsc版本不一致导致,升级依赖包里的typescript版本即可。tsc成功后 使用EGG_SERVER_SCOPE成功读取config.release_prod.js配置文件。
抱歉,放在CI里仍然读不到release_prod。
这不是 bug,是你写错。
extend/context 里面的 this 就是 ctx,为啥还要 const { ctx } = this。
ci 的看下前面的启动日志咯,这种问题,可以自己看看日志,分析下报错堆栈的。
所有的源码都已经在 egg-core 那里了,我们这个都是有单测保障的,如果你有问题,给出最小可复现方式,我们再来跟进,谢谢。
你截个图,我也只能干看不是么?最多看看我本地运行正不正常,看看单测正不正常,然后还能干嘛?
https://eggjs.github.io/zh/guide/config.html#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
本地用相同命令跑是可以的,依赖包也都是一样的。会不会是ubuntu16.04 环境下 那样传环境变量 有问题?
看下日志不就得了。。。
我这里npm start后并没有打出上面的环境变量的相关日志。。
最新版的egg和egg-scripts
start 是正式环境,直接写文件了。
https://eggjs.github.io/zh/guide/logger.html#%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E8%BE%93%E5%87%BA%E4%BD%8D%E7%BD%AE
都写的清清楚楚的
环境变量确实读到了。上图是CI环境的日志。是用config.release_prod.ts这样命名么?
没太看懂,这个scope与EGG_SERVER_ENV是相关联的么
是它的补充,看 https://github.com/eggjs/egg-core/blob/afa89c1b2ce89a2f8994943905172ee1bab6f77e/test/loader/mixin/load_config.test.js#L169 这个用例
是啊,tsc得到config.release_prod.js。 EGG_SERVER_ENV=prod EGG_SERVER_SCOPE=release。这样应该没错吧。是否会 一同读取 到 config.prod.js?
当然会,你跑下那个 fixtures 或写个最小可复现仓库试试就知道了。
npm script 可以改为 egg-scripts start --serverScope=release
@yyh1102
推荐在./config/config.prod.js 导入所需要的多环境(stag / preprod / ...)配置文件进行合并,在package.json添加以下命令按需启动:
"stag": "egg-scripts start --daemon --title=egg-server-egg-example",
"preprod": "egg-scripts start --daemon --title=egg-server-egg-example",
./config/config.prod.js 判断依据为:
process.env.npm_lifecycle_event == 'stag'
process.env.npm_lifecycle_event == 'preprod'
自动化上线按环境运行不同的启动脚本予以区分开配置信息 npm run stag / npm run preprod