想要通过命令或者fork子进程的方式执行脚本文件,像执行单测一样,能够使用orm操作数据库。不知道有没有什么方式
Q
[eggjs/egg]想要通过命令或者fork子进程的方式执行脚本文件,并能够拥有egg实例的属性,就像执行单测一样,能够使用orm操作数据库。
4
A
回答
2
参考django项目中执行脚本
3
你写个 node cli,在里面启动 egg,然后把你需要的指令封装下,里面就是 http 调用对应的接口呗。
或者是 REPL 的方式,通过 sock 的方式。
4
这个有点违背了我的本愿。 我现在要写一个接口,这个接口是要去执行一个耗时很长的任务,我开始想用fork或者spawn的方式创建子进程,执行脚本文件或者命令,但是无法传递对象类型的数据,比如ctx上下文。 所以我看了下单测里面有用egg-mock这个库去创建app和ctx实例,想用类似这种方式去写一个脚本,然后在接口里面执行命令。
8
但是这样上下文信息会丢,比如请求的参数什么的。而且我有个特别沙雕的做法,我把项目中的controller、service、model都托管给typedi容器,所以ctx和app中我拿不到service和model。。。自己把自己给坑了。。
8
你指的是运行期收到用户的请求后,触发一个后台任务? 这种肯定不能用 egg-mock 啥的。
耗时很长的任务,一般是要丢队列中,给一个单独的服务去处理的,而且一般不应该直接丢 ctx,而是把对应的关键数据拿出来丢过去。
8
对,我之前想丢队列,但是又觉得不值得。。其实不是很长,就是拉取微信全量用户信息。
7
那就直接 ctx.runInBackground 吧
5
666,没注意到有这个api,感谢
6
旧文档也有,不过可能比较深。
可以看下 https://eggjs.github.io/zh/guide/context.html#ctx-runinbackground