当尝试打开我的网络应用程序时,Heroku给了我503,在本地主机上工作

时间:2017-04-24 20:06:21

标签: node.js express heroku

我正在尝试部署到heroku,但即使它在localhost上运行也会获得503。我很好奇我的服务器是否设置正确,因为我比编程更新。我希望任何人都可以指出我在哪里寻找或提供建议的正确方向,因为我已经在谷歌上花费了无数个小时,持续了几个星期。

我的主要问题是我是否正确设置了服务器?我不确定我的监听器是否适用于heroku,我的.get用于在初始设置时在localhost上进行调试。

我的完整项目也可以在这里找到:

https://github.com/dirkdir/DerekDevSite

var express = require('express');
var app = express();
var path = require('path');


app.use(express.static(path.join(__dirname, 'public')));


app.get('/json', function(req, res) {
    console.log("GET the json");
    res
        .status(200)
        .json( {"jsonData" : true} );
});

app.get('/file', function(req, res) {
    console.log("GET the file");
    res
        .status(200)
        .sendFile(path.join(__dirname, 'app.js'));
});



    var server = app.listen(process.env.PORT || 5000), function() {
        var port = server.address().port;
        console.log("Express is working on port " + port);
});

日志:

2017-04-24T20:04:43.755866 + 00:00 app [web.1]:在Module._compile(module.js:542:28) 2017-04-24T20:04:43.755867 + 00:00 app [web.1]:at Object.Module._extensions..js(module.js:579:10) 2017-04-24T20:04:43.755868 + 00:00 app [web.1]:在Module.load(module.js:487:32) 2017-04-24T20:04:43.755868 + 00:00 app [web.1]:at tryModuleLoad(module.js:446:12) 2017-04-24T20:04:43.755869 + 00:00 app [web.1]:at Function.Module._load(module.js:438:3) 2017-04-24T20:04:43.755869 + 00:00 app [web.1]:在Module.runMain(module.js:604:10) 2017-04-24T20:04:43.755870 + 00:00 app [web.1]:运行时(bootstrap_node.js:393:7) 2017-04-24T20:04:43.755871 + 00:00 app [web.1]:启动时(bootstrap_node.js:150:9) 2017-04-24T20:04:43.846556 + 00:00 heroku [web.1]:状态从开始变为崩溃 2017-04-24T20:26:31.826133 + 00:00 heroku [router]:at = error code = H10 desc =" App崩溃" method = GET path =" /" host = derekdyerdev.herokuapp.com request_id = 609ef253-0a56-41ac-b877-1fb242f6f4e1 fwd =" 69.36.89.218" dyno = connect = service = status = 503 bytes = protocol = https 2017-04-24T20:26:32.319732 + 00:00 heroku [router]:at = error code = H10 desc =" App崩溃" method = GET path =" /favicon.ico" host = derekdyerdev.herokuapp.com request_id = f2a34e62-9765 -

8 个答案:

答案 0 :(得分:5)

您的34文件的app.js行上的括号位于错误的位置。 由于该函数是回调函数,因此需要在params内。

将最后一个块更改为:

var server = app.listen(process.env.PORT || 5000, function () {
  var port = server.address().port;
  console.log("Express is working on port " + port);
});

我还将Procfile修改为:

web: node app.js

在我修改之后我能够在本地运行,并且我将它部署到我的Heroku只是为了测试,并且它工作正常:)

答案 1 :(得分:1)

我有类似的问题。在localhost上工作..不是在部署到Heroku时。我的问题?我克隆了一个项目(node_modules也是),而我的package.json没有express,minimist等。所以它显然失败了。

提示:部署时,立即查看日志,以便了解整个部署过程中发生的情况。在失败后查看日志只会显示日志结束...

最后,确保您收听正确的端口。我这样做(正如其他人一样)

var serverPort = 8080;
. . .
var port = process.env.PORT || serverPort;

答案 2 :(得分:1)

这可能对某人有所帮助。 我最初的Procfile内容是:

web : node server.js

并且在将其更改为此之后,它起作用了:

web:node server.js

'web'和':'符号之间的空格是问题所在。

答案 3 :(得分:1)

这可能会帮助其他人

  1. 从终端中查看您的Heroku日志
  2. 查看错误消息
  3. 您可能已在全球范围内安装了任何npm模块
  4. 然后只需在本地安装该npm模块。
  5. 在git上提交更新的package.json和package-lock.json文件。
  6. 然后运行git push Heroku master

答案 4 :(得分:0)

我在heroku应用程序上遇到了同样的错误。 我在本地安装了cors,仅将文件app.js推送到存储库中,然后将其部署到了heroku。 错误实际上是cors软件包没有在我的package.json上声明(我只将app.js推送到github),所以当heroku尝试调用该应用程序时,由于cors未定义,导致了错误。

重点是,还要检查package.json是否已更新。

答案 5 :(得分:0)

我已在本地环境上运行应用程序。在日志中,我看到“找不到模块'index.js'”,我将主要js“ app.js”更新为“ index.js”,并更新了主要js的package.json。然后再次将我的代码推送到Heroku。它奏效了。

答案 6 :(得分:0)

Rails 6 仅API的应用程序部署到 Heroku 时,我遇到了同样的问题。

尝试在浏览器中访问应用程序时出现此错误:

应用程序错误

应用程序中发生错误,无法提供您的页面。如果您是应用程序所有者,请检查日志以获取详细信息。您可以使用以下命令从Heroku CLI中进行操作

heroku日志--tail

这是我修复的方式

我运行了以下命令来检查应用程序日志:

heroku logs --tail

然后,我在日志中向上滚动以查看启动应用程序服务器时的日志。然后我发现了这个错误:

2020-12-17T12:28:46.973736+00:00 heroku[web.1]: Process exited with status 1
2020-12-17T12:28:47.017905+00:00 heroku[web.1]: State changed from starting to crashed
2020-12-17T12:28:47.028049+00:00 heroku[web.1]: State changed from crashed to starting
2020-12-17T12:28:50.252842+00:00 heroku[web.1]: Starting process with command `bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-production}`
2020-12-17T12:28:53.969375+00:00 app[web.1]: Puma starting in single mode...
2020-12-17T12:28:53.969443+00:00 app[web.1]: * Version 4.3.7 (ruby 2.6.6-p146), codename: Mysterious Traveller
2020-12-17T12:28:53.969472+00:00 app[web.1]: * Min threads: 5, max threads: 5
2020-12-17T12:28:53.969505+00:00 app[web.1]: * Environment: production
2020-12-17T12:28:57.565417+00:00 app[web.1]: ! Unable to load application: SyntaxError: /app/app/policies/user_policy.rb:4: duplicated argument name
2020-12-17T12:28:57.565428+00:00 app[web.1]: def initialize(user, user)
2020-12-17T12:28:57.565429+00:00 app[web.1]: ^~~~
2020-12-17T12:28:57.565468+00:00 app[web.1]: bundler: failed to load command: puma (/app/vendor/bundle/ruby/2.6.0/bin/puma)
2020-12-17T12:28:57.565510+00:00 app[web.1]: SyntaxError: /app/app/policies/user_policy.rb:4: duplicated argument name
2020-12-17T12:28:57.565510+00:00 app[web.1]: def initialize(user, user)
2020-12-17T12:28:57.565511+00:00 app[web.1]: ^~~~

我修复了代码中的错误,该错误是由重复的参数名称引起的,即我的Pundit gem策略中的def initialize(user, user)

在应用程序中针对用户app/policies/user_policy.rb)的策略文件中,我只是重命名了:

def initialize(user, user) 

def initialize(user, user_model)

并且几乎在app/policies/user_policy.rb文件中其他位置重命名了user, user都已定义为user, user_model

我保存然后将其投入生产,这为我解决了这个问题。

仅此而已。

我希望这会有所帮助

答案 7 :(得分:0)

我必须做几件事才能让我的应用运行,我会列出所有这些,以防它对任何人有帮助。

1.) 确保像这样在 package.json 文件中指定节点的版本

"engines": {
   "node": "14.15.1"
 }

2.) 确保您的 Procfile 中没有错误,以下命令对我有用

 web: node server.js

3.) 我的 server.js 文件在 src 文件夹中,这是我的根本原因,我有 将其移出该文件夹,然后它开始为我工作