每次提出请求时,我可以告诉领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个命令:

  1. gem安装重新运行
  2. 重新开始工头

然后重新运行将在您的文件发生任何更改后自动重新启动进程。

如果你使用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