每次提出请求时,我可以告诉领class重新加载Web应用程序,以便我可以正常开发?
我使用node.js在JavaScript中编写的Web应用程序 我使用福尔曼,但我不想每次更改我的代码时手动重新启动服务器。 我可以告诉工头重新加载整个networking应用程序之前处理HTTP请求(即重新启动node
进程)?
这是Pendlepants解决scheme的调整版本。 Foreman查找一个.env文件来读取环境variables。 而不是添加一个包装,你可以让福尔曼切换它使用什么命令来启动:
在.env中:
WEB=node app.js
在dev.env中:
WEB=supervisor app.js
在你的Procfile中:
web: $WEB
默认情况下,Foreman会从.env(在Production中)读取,但是在DEV中运行这个:
foreman start -e dev.env
你可以使用rerun来达到这个目的
您可能只为此执行2个命令:
- gem安装重新运行
- 重新开始工头
然后重新运行将在您的文件发生任何更改后自动重新启动进程。
如果你使用nodemon ,你可以做
nodemon --exec "foreman start"
Foreman的问题不在于如何在新的请求上重新加载代码。 解决方法是使用一个像监督员一样的npm软件包以及Foreman的环境包装器。
首先,安装主pipe:
npm install -g supervisor
然后,写一个Foreman可以调用的封装shell脚本:
if [ "$NODE_ENV" == "production" ]; then node /path/to/app.js else supervisor /path/to/app.js fi
通过运行chmod a+x /path/to/wrapper_script.sh
将包装脚本的权限设置为可执行
最后,更新领class使用包装脚本。 所以在你的Procfile
:
web: /path/to/wrapper_script.sh
现在,当您运行Foreman并且您的节点应用程序未在生产环境中运行时,它应该在每个请求上重新加载。
我觉得Peter Ehrlich对这个原始问题的评论是值得自己回答的。 我认为一个不同的本地/ dev的Procfile绝对是最好的解决scheme: https ://stackoverflow.com/a/10790514/133720
如果你使用node-dev,你甚至不需要安装任何新东西。
从Procfile加载的.env文件:
NODECMD=node-dev
你的Procfile:
web: $NODECMD app/server.js
你的领class指挥
foreman start -e dev.env -p 9786
而在你的制作env(heroku)中设置一个环境variables:
NODECMD=node