【问题标题】:How do I have foreman reload node.js when a file is changed?更改文件时如何让工头重新加载 node.js?
【发布时间】:2012-12-05 16:36:12
【问题描述】:

我目前在本地开发时使用supervisor 运行我的node.js 应用程序。这很棒,但我目前将所有configs 存储在我的.bash_profile 中,我想将它们移动到.env 文件中。

有没有办法通过supervisor的文件监视功能来获得foreman的环境加载功能?

一种选择是像这样将它添加到我的Procfile,但我怀疑这会搞砸 Heroku。

`local: supervisor web.js`

【问题讨论】:

  • 我认为supervisor 在检测到文件更改时重新加载您的 nodejs 应用程序......“它运行您的程序,并监视代码更改,因此您可以进行热代码重新加载行为”,其他当您将代码推送到 heroku 时,它会重新加载您的服务器,因此只有在您的本地主机上您才需要主管,或者当您的脚本崩溃时 heroku 不再运行它?
  • 本地开发只需要它,所以我不必手动 Ctl-C 正在运行的 node.js 应用程序。
  • 也许你可以在没有工头的情况下使用主管(?)
  • 这就是我目前所做的,但主管不支持从文件加载环境变量。

标签: node.js heroku foreman


【解决方案1】:

这是我整理的解决方案,效果很好。

安装RerunRb-fsevent

sudo gem install rerun rb-fsevent  

如果您还没有安装 Foreman。

sudo gem install foreman

将环境变量放在项目根目录下的.env 中。

别忘了将.env 添加到您的.gitignoredon't want that sensitive info in your code

echo '.env' >> .gitignore  

这是我的Procfile 的样子

web: node web.js

现在就这样开始

rerun foreman start web  

加分,创建别名

echo "alias rrun='rerun foreman start web'" >> ~/.bash_profile  

【讨论】:

  • 嗨。知道为什么这对我不起作用吗?在我更改了一些文件后,我得到了 EADDRINUSE,这意味着该进程实际上并没有停止并释放它正在侦听的端口
  • @Guard 你能把你的一些文件放在一个要点中,这样我们就可以看到你在做什么?我认为默认情况下rerun 只监视某些类型的文件。
  • 我添加了适当的掩码,并在我编辑咖啡文件时重新启动。问题在于 EADDRINUSE 在脚本 is 重新启动 后抛出
【解决方案2】:

另一种解决方案是使用您当前的配置为您的开发环境创建另一个 Procfile 文件:

# Procfile.dev
web: supervisor app.js

然后使用该文件启动foreman

$ foreman start -f Procfile.dev

您可以选择从您的 git 存储库中排除该文件

$ echo "Procfile.dev" >> .git/info/exclude

【讨论】:

  • 如何让主管与工头一起在调试模式下运行。它不喜欢产生其他进程。
  • 对于节点工头用户,将第二条命令更改为:nf start -j Procfile.dev
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2013-10-06
  • 2018-09-04
  • 2012-11-28
  • 2010-11-17
相关资源
最近更新 更多