我正在尝试将reveal.js 应用程序部署到Heroku。Reveal.js 通过grunt connect
命令在节点上运行。该应用程序还需要 ruby 来即时编译资产。在本地,我可以使用grunt serve
.
最初,由于 compass 是 的依赖项grunt watch
,Heroku 只检测到 Gemfile 并假设我正在运行一个 ruby 应用程序。我使用 nodejs 自定义 buildpack 来强制 Heroku 将其视为 nodejs 应用程序。
Procfile 包含
web: grunt serve
日志显示
2013-06-17T13:51:56.187012+00:00 heroku[router]: at=error code=H14 desc="No web processes running"
heroku ps
也没有显示任何内容。我可以成功运行“heroku run grunt serve”,并且我已将reveal附带的默认Gruntfile.js修改为接受process.env,即
connect: {
server: {
options: {
port: process.env.PORT || 8000,
base: '.'
}
}
}
作为最后一次尝试,我尝试使用 Heroku-nodejs-grunt 构建包( https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt ),它将在部署时运行 grunt 任务来编译资产。仍然没有运气,heroku logs --tail
仍然显示没有进程运行。探索heroku run
显示 grunt 可用,并且grunt serve
命令成功执行。
当开始使用新的 grunt 构建包时,上面的 Gruntfile.js 出现错误,说“进程”未定义。我将端口切换为0。
Web 服务器将响应的端口。如果指定的端口已被使用,任务将失败。您可以使用特殊值 0 或 '?' 使用系统分配的端口。
没用,试过“?”,没用(仍然没有网络进程和heroku restart
什么也没做)
我不知道如何让 Heroku 使用 grunt 作为我的主要 Web 服务器进程!