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

Posted

技术标签:

【中文标题】Heroku 在尝试打开我的网络应用程序时给了我一个 503,在本地主机上工作【英文标题】:Heroku is giving me a 503 when trying to open my web app, works on local host 【发布时间】:2017-09-21 15:37:46 【问题描述】:

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

我的主要问题是我是否正确设置了我的服务器?我不确定我的监听器是否适用于 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]: 在 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]: 在 tryModuleLoad (module.js:446:12) 2017-04-24T20:04:43.755869+00:00 app[web.1]: 在 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 应用 [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[路由器]: at=error code=H10 desc="App crashed" 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[路由器]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=derekdyerdev.herokuapp.com request_id= f2a34e62-9765-

【问题讨论】:

查看/分享您的 Heroku 日志。那么您将更深入地了解问题可能是什么 你能运行heroku logs --tail 并将结果粘贴到这里吗? (这将返回最近记录的错误,并可能表明出了什么问题) 丽西,谢谢您的回复。我目前在办公室,无法运行上述命令,但是,我已在底部的问题正文中发布了我的日志 【参考方案1】:

您的app.js 文件的34 行的括号放错了位置。 由于该函数是一个回调,它需要在参数内。

将最后一个块更改为:

const server = app.listen(process.env.PORT || 5000, () => 
  const port = server.address().port;
  console.log(`Express is working on port $port`);
);

我还将Procfile 修改为:

web: node app.js

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

【讨论】:

这是我的 Heroku 上的演示:nameless-beach-38136.herokuapp.com(别担心,我会在你看到它后立即删除它!)不过看起来不错! 非常感谢!太棒了。我真的很感谢你的帮助!我总是忽略了一些小事情,第一个使用 MEAN 堆栈的项目没有帮助! 我将默认端口值设置为 3000,这就是为什么它不起作用,我更改为 5000 并且它起作用了【参考方案2】:

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

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

最后,确保您在正确的端口上进行监听。我这样做(其他人也这样做)

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

【讨论】:

【参考方案3】:

这可能对某人有帮助。 我最初的个人资料内容是这样的:

web : node server.js

在改成这个之后,它起作用了:

web:node server.js

'web' 和 ':' 符号之间的空格是问题所在。虽然很奇怪

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

这可能会帮助其他人

    从终端查看您的 Heroku 日志 查看错误信息 这可能是您全局安装的任何 npm 模块 然后只需在本地安装该 npm 模块即可。 在 git 上提交更新后的 package.json 和 package-lock.json 文件。 然后运行git push Heroku master

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

在将 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)

在我的应用程序的 Users (app/policies/user_policy.rb) 的策略文件中,我简单地重命名了:

def initialize(user, user) 

def initialize(user, user_model)

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

我保存了它,然后将其推送到生产环境,这为我解决了问题。

就是这样。

我希望这会有所帮助

【讨论】:

【参考方案8】:

在我的应用程序运行之前我必须做几件事,我会列出所有这些以防它对任何人有所帮助。

1.) 确保在 package.json 文件中指定节点的版本,如下所示

"engines": 
   "node": "14.15.1"
 

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

 web: node server.js

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

【讨论】:

【参考方案9】:

我正在为类似的问题而苦苦挣扎,然后注意到我的Procfile 中有引号。当我删除它们时,问题就解决了。

 "web: node index.js" WRONG!

必须不带引号:

 web: node index.js CORRECT!

【讨论】:

以上是关于Heroku 在尝试打开我的网络应用程序时给了我一个 503,在本地主机上工作的主要内容,如果未能解决你的问题,请参考以下文章

Apollo + React 在执行突变时给了我 400 错误。可能的 httpLink 错误

带有 MySql 冲突的 Docker 映像在启动时给了我一个异常

GetEnumerator().Current 在主函数中调用时给了我一个异常

尽管在设置中指定了日期格式,但 Django 在运行测试时给了我一个“无效的日期格式”错误

GraphQL + Relay 现代片段给了我一系列空帖子

heroku 给了我不允许的方法