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 在主函数中调用时给了我一个异常