Node.js 应用程序适用于工头,但不适用于 heroku。 404 错误

Posted

技术标签:

【中文标题】Node.js 应用程序适用于工头,但不适用于 heroku。 404 错误【英文标题】:Node.js app works on foreman but not heroku. 404 Error 【发布时间】:2013-10-09 12:39:20 【问题描述】:

我正在使用 Yeoman/bower/grunt 构建一个 Angular 应用程序。该应用程序在工头上完美运行。在我搜索堆栈上的类似问题时,大多数其他人只是忘记创建他们的 Procfile 或在运行应用程序的 app.js 中有错误。但是我有这两个,我无法弄清楚它们有什么问题,比如工头工作而不是heroku。当我部署到 heroku 并打开它时,我会在日志中看到:

2013-10-02T19:33:56.159151+00:00 heroku[api]: Deploy b417d22 by richardadavila@gmail.com
2013-10-02T19:33:56.202052+00:00 heroku[api]: Release v10 created by     richardadavila@gmail.com
2013-10-02T20:38:51.350572+00:00 heroku[web.1]: Idling
2013-10-02T20:38:57.626159+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2013-10-02T20:39:02.097317+00:00 heroku[web.1]: State changed from up to down
2013-10-02T20:39:02.079612+00:00 heroku[web.1]: Process exited with status 143
2013-10-02T22:00:00.360769+00:00 heroku[web.1]: Unidling
2013-10-02T22:00:00.361135+00:00 heroku[web.1]: State changed from down to starting
2013-10-02T22:00:04.049439+00:00 heroku[web.1]: Starting process with command `node app.js`
2013-10-02T22:00:06.128657+00:00 app[web.1]: server started 40741
2013-10-02T22:00:06.164522+00:00 heroku[web.1]: State changed from starting to up
2013-10-02T22:00:07.479644+00:00 heroku[router]: at=info method=GET path=/ host=rickydavila-kpopbetter-s.herokuapp.com fwd="71.144.19.194" dyno=web.1 connect=9ms service=30ms status=404 bytes=22

没有错误(我可能不完全理解日志),它只是杀死了应用程序。

我的 Procfile 说:“node app.js”

创建快速服务器以运行应用程序的我的 app.js 文件是:

var express = require('express');

var path = require('path');

var app = express();

app.configure(function()
  'use strict';
  app.use(express.bodyParser());
  app.use(express.static(path.join(__dirname, 'dist')));
);

var port = process.env.PORT || 5000;

app.listen(port, function() 
    'use strict';
    console.log('server started '+port);
);

Grunt 将应用程序构建到我上面引用的 dist 文件夹中。上面有什么明显的错误吗?当我打开 heroku 应用程序 url 时,页面状态:Cannot GET /

哦,我也缩放了测功机,因为其他一些问题没有做到。据我所知,我并没有对端口进行硬编码。

【问题讨论】:

【参考方案1】:

想通了。始终检查您的 .gitignore 文件!我忘记从文件中删除 dist 并且它没有被提交或推送到 heroku。

【讨论】:

非常感谢,和你一样,我一直在到处寻找解决方案。我希望设置它,这样我就不需要将 dist 提交到 repo,只需让 travis 构建并从我的源代码部署它。您对如何做到这一点有任何想法,或者这是一个好主意还是坏主意? 对 Travis 一无所知,但如果你问如何不提交 dist 而只有 dist 部署到 heroku 然后搜索如何使用 git 执行此操作,我记得看到一个问题和答案关于那个。 Def可能,很多人都这样做:我快速搜索并看到了这些:[链接](***.com/questions/18183872/…),link。希望对您有所帮助 谢谢!我一直在使用 subtree 方法,第一个在自己的分支上有 dist 的方法很有趣。我想我可以操纵我的构建过程来自动执行其中之一。 这 x1000000。浪费了很多时间试图弄清楚为什么 heroku 不会为我的公共目录提供服务。它已添加到.gitignore。哇!

以上是关于Node.js 应用程序适用于工头,但不适用于 heroku。 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 适用于 localhost 但不适用于 Heroku 服务器

为什么 0适用于该程序但不适用于在子函数中执行while循环的情况? [关闭]

AWS Elastic Beanstalk Tomcat 适用于 .war 但不适用于 .zip

MagicalRecord - 速记适用于某些实体,但不适用于其他实体

AlAssetsLibrary 问题,代码适用于 4.3 但不适用于 5.0

cv::VideoCapture 适用于网络摄像头,但不适用于 IP 摄像头?