CNode

node.js在生产环境中修改代码后可不可以不重启node.js而运行新的代码?

问答
Ffsrm365发布于12 年前最后回复12 年前13 回复32585 浏览0 收藏

比如PHP,修改了代码然后上传覆盖旧的代码,打开浏览器访问页面就立马能看到修改。而node.js呢?正在学习sails.js,发现修改代码后要ctrl+C结束后再次运行才行。。 开发环境当然没有问题,但是在生产环境中这样可不行,有没有什么办法或工具解决呢??本人初学node.js,希望大家不要拍砖

查看回复

回复 (13)

R
russj#1·12 年前

pm2 forever lots of them

M
MiguelValentine#2·12 年前

那也是重启。开发环境用eval+数据库存函数

F
fsrm365#3·12 年前
引用 russjpm2 forever lots of them

@russj 谢谢

N
ngot#5·12 年前

热升级嘛,哈哈到时nodeparty就讲讲这个

K
koukuko#6·12 年前

生产环境下 pm2 reload all

L
lyjyiran#7·12 年前

严谨的php生产环境一般也是不直接做线上覆盖的, 毕竟多个文件之间的修改不是原子的, 而且热部署下opcode缓存未刷新或者部分刷新也有很大可能会导致一些其他问题.

M
MiguelValentine#8·12 年前

fs模块有个watch 我有个新思路还没实现 fs watch (路由文件夹/函数文件夹) 污染一个global全局。类似于global.func={},global.rout={} 将路由注册进global.rout,函数注册进global.func 当fs.watch事件触发 global.rout和global.func重加载

B
bnuhero#9·12 年前

比较靠谱的还是用nginx做反向代理和负载均衡。每个Node.js服务器实例接收到SIGTERM信号后,不再接收新请求,等待现有请求处理完毕,结束执行。然后再用新代码重启这个Node.js服务器实例。

zero downtime deployments with nginx

R
russj#11·12 年前

nginx 这个方案听起来不错 可以配合 pm2 使用

I
i5ting#12·12 年前

npm install supervisor才是正道

然后用gulp的watch + livereload

完美

P
pockry#13·12 年前

nodejs 本身不支持热更新,因为所有的js代码都被编译和缓存进内存了,你覆盖原有代码对已经运行的服务无影响。像某些模块可以做livelode的都是通过代理和注入,我个人不是很推荐。还是老老实实重启吧,有pm2的话也花不了多长时间。

参与回复
登录后即可参与回复。登录