我正在尝试部署到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 -
答案 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)
这可能会帮助其他人
Heroku
日志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 文件夹中,这是我的根本原因,我有 将其移出该文件夹,然后它开始为我工作