Heroku 无法获取 /
Posted
技术标签:
【中文标题】Heroku 无法获取 /【英文标题】:Heroku Cannot GET / 【发布时间】:2014-08-25 08:10:46 【问题描述】:我是 Heroku 的新手,我相信我正在按照 Heroku 网站上列出的所有步骤通过 node.js 进行部署 - https://devcenter.heroku.com/articles/getting-started-with-nodejs - 但尽管有成功的迹象,但我只在浏览器中看到这个新生成的 herokuapp.com 网站。
无法获取/
执行时没有错误
git push heroku master
我的 Procfile 很简单
web: node app.js
我还不太了解 dynos,但似乎有一个正在运行:
heroku ps === 网络(1X):
node app.js
web.1: 2014/07/03 23:55:00 (~ 18m 前) 向上
然后:
heroku 打开 打开APP-NAME...完成
但是https://APP-NAME.herokuapp.com/ 只是显示 Cannot GET / 消息。
【问题讨论】:
【参考方案1】:确保您已准备好以下两件事:
-
在您的 package.json 中,包含 heroku-postbuild 行,在我的情况下是这样的,(如果您需要进行多次安装,它可能会改变)
"scripts":
"heroku-postbuild": "npm install --prefix client && npm run build --prefix client"
,
-
在您的 index.js 文件中,添加生产条件
if (process.env.NODE_ENV === "production")
app.use(express.static("build"));
app.get("*", (req, res) =>
res.sendFile(path.resolve(__dirname, "build", "index.html"));
);
Express 将提供生产资产 比如我们的 main.js 文件,或者 main.css 文件
最后,Express 查看请求是否针对资产 Express 将提供 index.html 文件 如果它不识别路线
【讨论】:
【参考方案2】:我遇到了这个错误,最终我的问题是由于我的目录结构,我发送到 express.static()
的路径是错误的。
我可以通过注销路径然后修复它来解决这个问题。
【讨论】:
【参考方案3】:我有同样的问题。我终于解决了。
我的代码有两个文件夹。一个包含我所有后端 nodejs 文件的服务器文件夹和一个包含所有前端文件的客户端文件夹。从一开始就是这个问题。
我在服务器文件夹中git init
,然后是git commit
和git push
。它在构建中没有给我任何错误,但在 heroku logs
中它显示 404。
经过 5 个小时的研究,我认为 Heroku Cannot GET /
表示它无法访问前端文件,因为我只部署了服务器文件夹(Duh!)。
我摆脱了服务器文件夹并将我的所有后端文件移动到与客户端文件夹相同的级别,更改了一些客户端文件路径。重做git init
、git commit
、git push
。繁荣!一切都按预期工作!
因此,请确保您的服务器文件与客户端文件夹处于同一级别并部署整个代码文件夹。
希望这会有所帮助!
【讨论】:
【参考方案4】:我有点尴尬,但我的错误是运行 git push heroku master 而没有提交更改。
【讨论】:
【参考方案5】:在 server.js 中添加这两行对我有用:
var distDir = __dirname + "/dist/";
app.use(express.static(distDir));
我的dist结构如下:
【讨论】:
【参考方案6】:我认为您还没有将文件添加到 git。无论您在本地计算机上编辑了什么文件,都需要git add xyz.ext
、git commit -m "Message"
、git push heroku master -u
(-u
将保存“heroku master”参数,因此您以后只需键入git push
) .
简而言之,每次要求您部署应用程序时,您都需要git add
、git commit
、git push
。希望对您有所帮助。
【讨论】:
【参考方案7】:我不知道它为什么起作用,但我将我的角度 /dist
的位置从 [root]client/dist
更改为 [root]/dist
,它与 server.js
处于同一目录级别
【讨论】:
【参考方案8】:快 3 年了,但我正在回答以供参考。
通常 /dist 是构建过程生成的目录,它是临时的,在我们的源代码中工作时会发生很多变化,因此 /dist 没有版本控制。 在您的 package.json 中,您可以在此构建过程中添加一个名为 postinstall 的脚本,假设您在 gulp 中有一个名为 build 的任务...所以 "postinstall": "gulp build" 如果您也在 bower 中管理项目的依赖项,请 npm install --save bower 和 "postinstall": "./node_modules/bower/bin/bower install && gulp build"只是为您的 package.json 裁剪的一个简单示例
"dependencies:
"bower":"^1.8.0",
"grunt":"^1.0.1",
,
"scripts":
"start": "node ./www.js",
"build": "grunt dist",
"postinstall": "./node_modules/bower/bin/bower install && npm run build"
很明显,您现在可能已经完成并且更好了...我只是在下次咨询时参考它。
【讨论】:
【参考方案9】:我的 .gitignore 文件中包含了我的 dist 目录,因此我没有将 dist 提交到我的仓库,也没有将其推送到 Heroku。因此,Heroku 找不到任何要提供的内容。
我更新了我的 .gitignore、提交和推送,我的应用现在在 Heroku 上显示得很好。
【讨论】:
我认为dist
文件夹将始终包含新更改,因此不应提交。如果我错了,请纠正我。以上是关于Heroku 无法获取 /的主要内容,如果未能解决你的问题,请参考以下文章
无法获取给定 url 的内容 - Heroku 上的 Django CKEditor
奇怪的 Create-React-App Heroku 错误 - 无法获取 /