2013-06-04 78 views
1

我在尝试在Heroku上运行简单的Node.js应用程序时遇到了令人沮丧的“错误”。 Heroku本身并不报告错误 - 应用程序已启动(未崩溃,未显示“Hxx”代码);我所得到的是这样的:在Heroku上运行Node.js应用程序时出错

heroku[router]: at=info method=GET path=/index.html 
host=realsheek.herokuapp.com fwd="24.63.82.165" dyno=web.1 connect=0ms 
service=4ms status=404 bytes=33 

当我从浏览器中运行的应用程序,它说Cannot GET。我不知道它试图GET。我的应用程序是使用Mozilla的SocialAPI的SocialProvider的测试平台。该应用程序本身是来自https://github.com/mixedpuppy/socialapi-demo的演示版本。一些错误被修复了,否则这个和这个演示是一样的(我只用修复了的bug就使用了回购)。我有一个index.html页面,它安装SocialProvider,此时服务器端应用程序启动并执行其余的魔术。它在localhost上运行良好,但是当我将它推到Heroku时,它失败了。 git push报告没有问题(只是通常的“无自述数据”警告)。

我很难过,因为我只是无法看到它试图获得什么;显然404错误表明缺少页面,但该应用程序不会调用任何HTML页面,并且需要的所有内容都存在(如我在localhost上确认的那样)。

我意识到这并不是很多事情要继续下去,没有看到实际的应用程序,也不知道它正在尝试做什么。没有真正的错误报告 - 只是404状态,显然可能是任何事情。但目前我很难受,所以如果有人有任何见解或建议,我会非常感激。

+0

**更新**我用了一个_LiveHTTPHeaders_工具检查标题并发出一个GET,并且不返回任何内容(以及404状态)。 我开始怀疑Heroku服务器设置不像传统或流行的Web服务器,它设置为提供'index.html'或'default.html'文件来响应GET,只需要路径。相反,感觉Heroku可以让你创建任何你想要的服务器配置,并且“默认”不做任何事情。 我在想,我得到404的原因是我实际上没有返回任何东西 - 这是我的责任。 – Lew

+0

**更新(续)**:因此,在我的'Node.js'应用程序中,以及创建服务器并侦听外部,我还需要提供静态HTML页面以供用户查看。 如果有人知道Heroku并且可以证实这一点,它会让我走上正确的轨道来开发解决方案。谢谢。 – Lew

回答

0

该演示不是一个节点应用程序,或至少没有包装的方式heroku喜欢它与Procfile和一切。如果你有一个节点应用程序,那么它会根据它的代码(或者至少它应该)来服务于静态文件,但是对于静态页面(比如Apache或者nginx或者其他),Heroku并不是一个标准的Web服务器。 Heroku的构建是为了运行网络应用程序,它们本质上是他们自己的服务器。

如果你得到一个节点服务器运行,这个节点的heroku快速启动应该会帮助你。 https://devcenter.heroku.com/articles/nodejs

+0

感谢您回复@Strat。我在创建应用程序时经历了整个页面,并且经常提到它。你的重点是_“heroku不是静态页面的标准网页服务器(如Apache或nginx或其他)。”这是问题的核心,我越来越相信我的'index.html '没有被加载(并且最初的浏览器'GET'失败),因为我没有做任何事情来提供这个文件,Heroku不会为我开箱即用;我需要创建一个基本的服务器来响应'GET /'加载'index.html'并返回。那么它应该工作。 – Lew

+0

我其实是看过你引用的github,app.js是一个有效的nodejs应用程序,它应该提供静态文件 - 你只需要一个package.json文件和Procfile(只需要一行:node app.js)会告诉Heroku构建这个包(因为你使用的是类库等),并启动app.js,然后你应该能够检索你的静态文件,如index.html。该说明也应该放在heroku页面上。没有那些东西,heroku不知道如何处理你发送的大量代码。希望能帮助到你! – Strat

+0

嘿@Strat - 再次感谢你。是的,我有'package.json'和'Procfile',并且它构建得很好。问题在于浏览器正在发布“GET”,但该应用中没有任何内容正在为该页面提供服务。一旦我添加了一个'app.use(express.static(__ dirname)...)',一切都很好 - 一个页面正在投放,404消失了,应用程序工作。所以,感谢您花时间回复 - 如您所见,您是唯一一位。干杯.... – Lew

0

我有类似的问题。解决方案如下所示:

1)确保已正确书写Procfile。它应该看起来像:

web: node index.js 

2)推动代码的Heroku之后,尝试运行以下命令:

heroku ps:scale web=1 

希望帮助!

+0

我有一个快递js应用程序,其中我的Procfile说web:节点app.js,我需要将其更改为index.js?这是否意味着我需要将我的app.js代码转移到index.js或者app.js保持原样? – codeinprogress

7

嗨,我也很沮丧了很多,同时部署应用程序。 为了部署你需要确定两件事情。

1)使用设置端口环境变量var port=Number(process.env.PORT || 3000);

2)不要忘了包括Procfile为网络:节点app.js(起始文件)