我想在Heroku上部署我的Expree.js“博客-网站”项目,但是在多次尝试soo之后,我得到了“应用程序错误”,您的应用程序已经崩溃了"H10“。这是package.json文件。我跟随了所有的步骤,如果我错过了什么,请告诉我:
{
"name": "ejs-challenge",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"repository": {
"type": "git",
"url": "git@github.com:soniiya/Blogging-final.git"
},
"author": "",
"license": "ISC",
"engines": {
"node": "14.17.6"
},并在我的app.js文件中添加了以下内容:
app.listen(process.env.PORT || 3000, function () {
console.log("Server started on port 3000");
});我也创建了Procfile "web: node app.js“。实际上,当我在没有用户身份验证功能的情况下部署同一个应用程序时,它成功地部署了,但是当添加身份验证时,它现在崩溃了。我用MongoDB做数据库,如果你有什么建议,请告诉我。什么能导致“应用程序崩溃”在heroku上?
This is the "heroku logs":
$ heroku logs --app agile-journey-27742
» Warning: heroku update available from 7.53.0 to
» 7.59.2.
2021-12-25T15:01:48.138120+00:00 app[api]: Release v4 created by user soniyajaiswal995@gmail.com
2021-12-25T15:01:48.138120+00:00 app[api]: Set DB_PATH config vars by user soniyajaiswal995@gmail.com
2021-12-25T15:01:48.343377+00:00 heroku[web.1]: State changed from crashed to starting
2021-12-25T15:01:51.169675+00:00 heroku[web.1]: Starting process with command `node app.js`
2021-12-25T15:01:52.431858+00:00 app[web.1]: Sat, 25 Dec 2021 15:01:52 GMT express-session deprecated req.secret; provide secret option at app.js:50:9
2021-12-25T15:01:52.432471+00:00 app[web.1]: Warning: connect.session() MemoryStore is not
2021-12-25T15:01:52.432472+00:00 app[web.1]: designed for a production environment, as it will leak
2021-12-25T15:01:52.432472+00:00 app[web.1]: memory, and will not scale past a single process.
2021-12-25T15:01:52.442695+00:00 app[web.1]: /app/node_modules/passport-oauth2/lib/strategy.js:87
2021-12-25T15:01:52.442712+00:00 app[web.1]: if (!options.clientID) { throw new TypeError('OAuth2Strategy requires a clientID option'); }
2021-12-25T15:01:52.442713+00:00 app[web.1]: ^
2021-12-25T15:01:52.442713+00:00 app[web.1]:
2021-12-25T15:01:52.442713+00:00 app[web.1]: TypeError: OAuth2Strategy requires a clientID option
2021-12-25T15:01:52.442714+00:00 app[web.1]: at Strategy.OAuth2Strategy (/app/node_modules/passport-oauth2/lib/strategy.js:87:34)
2021-12-25T15:01:52.442714+00:00 app[web.1]: at new Strategy (/app/node_modules/passport-google-oauth20/lib/strategy.js:52:18)
2021-12-25T15:01:52.442714+00:00 app[web.1]: at Object.<anonymous> (/app/app.js:97:14)
2021-12-25T15:01:52.442714+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:1072:14)
2021-12-25T15:01:52.442718+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
2021-12-25T15:01:52.442718+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:937:32)
2021-12-25T15:01:52.442719+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:778:12)
2021-12-25T15:01:52.442719+00:00 app[web.1]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
2021-12-25T15:01:52.442719+00:00 app[web.1]: at internal/main/run_main_module.js:17:47
2021-12-25T15:01:52.585001+00:00 heroku[web.1]: Process exited with status 1
2021-12-25T15:01:52.686499+00:00 heroku[web.1]: State changed from starting to crashed
2021-12-25T15:02:05.594774+00:00 app[api]: Set DB_ADMIN config vars by user soniyajaiswal995@gmail.com
2021-12-25T15:02:05.594774+00:00 app[api]: Release v5 created by user soniyajaiswal995@gmail.com
2021-12-25T15:02:06.819898+00:00 heroku[web.1]: State changed from crashed to starting
2021-12-25T15:02:09.868314+00:00 heroku[web.1]: Starting process with command `node app.js`
2021-12-25T15:02:11.032225+00:00 app[web.1]: Sat, 25 Dec 2021 15:02:11 GMT express-session deprecated req.secret; provide secret option at app.js:50:9
2021-12-25T15:02:11.032895+00:00 app[web.1]: Warning: connect.session() MemoryStore is not
2021-12-25T15:02:11.032896+00:00 app[web.1]: designed for a production environment, as it will leak
2021-12-25T15:02:11.032896+00:00 app[web.1]: memory, and will not scale past a single process.
2021-12-25T15:02:11.042607+00:00 app[web.1]: /app/node_modules/passport-oauth2/lib/strategy.js:87
2021-12-25T15:02:11.042608+00:00 app[web.1]: if (!options.clientID) { throw new TypeError('OAuth2Strategy requires a clientID option'); }
2021-12-25T15:02:11.042609+00:00 app[web.1]: ^
2021-12-25T15:02:11.042609+00:00 app[web.1]:
2021-12-25T15:02:11.042610+00:00 app[web.1]: TypeError: OAuth2Strategy requires a clientID option
2021-12-25T15:02:11.042610+00:00 app[web.1]: at Strategy.OAuth2Strategy (/app/node_modules/passport-oauth2/lib/strategy.js:87:34)
2021-12-25T15:02:11.042610+00:00 app[web.1]: at new Strategy (/app/node_modules/passport-google-oauth20/lib/strategy.js:52:18)
2021-12-25T15:02:11.042611+00:00 app[web.1]: at Object.<anonymous> (/app/app.js:97:14)
2021-12-25T15:02:11.042611+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:1072:14)
2021-12-25T15:02:11.042611+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
2021-12-25T15:02:11.042612+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:937:32)
2021-12-25T15:02:11.042612+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:778:12)
2021-12-25T15:02:11.042612+00:00 app[web.1]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
2021-12-25T15:02:11.042613+00:00 app[web.1]: at internal/main/run_main_module.js:17:47
2021-12-25T15:02:11.173932+00:00 heroku[web.1]: Process exited with status 1
2021-12-25T15:02:11.236915+00:00 heroku[web.1]: State changed from starting to crashed
2021-12-25T15:02:18.714430+00:00 app[api]: Set DB_PASS config vars by user soniyajaiswal995@gmail.com
2021-12-25T15:02:18.714430+00:00 app[api]: Release v6 created by user soniyajaiswal995@gmail.com
2021-12-25T15:02:18.957618+00:00 heroku[web.1]: State changed from crashed to starting
2021-12-25T15:02:21.915023+00:00 heroku[web.1]: Starting process with command `node app.js`
2021-12-25T15:02:23.655207+00:00 app[web.1]: Sat, 25 Dec 2021 15:02:23 GMT express-session deprecated req.secret; provide secret option at app.js:50:9
2021-12-25T15:02:23.656076+00:00 app[web.1]: Warning: connect.session() MemoryStore is not
2021-12-25T15:02:23.656077+00:00 app[web.1]: designed for a production environment, as it will leak
2021-12-25T15:02:23.656077+00:00 app[web.1]: memory, and will not scale past a single process.
2021-12-25T15:02:23.667352+00:00 app[web.1]: /app/node_modules/passport-oauth2/lib/strategy.js:87
2021-12-25T15:02:23.667354+00:00 app[web.1]: if (!options.clientID) { throw new TypeError('OAuth2Strategy requires a clientID option'); }
2021-12-25T15:02:23.667355+00:00 app[web.1]: ^
2021-12-25T15:02:23.667355+00:00 app[web.1]:
2021-12-25T15:02:23.667355+00:00 app[web.1]: TypeError: OAuth2Strategy requires a clientID option
2021-12-25T15:02:23.667356+00:00 app[web.1]: at Strategy.OAuth2Strategy (/app/node_modules/passport-oauth2/lib/strategy.js:87:34)
2021-12-25T15:02:23.667356+00:00 app[web.1]: at new Strategy (/app/node_modules/passport-google-oauth20/lib/strategy.js:52:18)
2021-12-25T15:02:23.667356+00:00 app[web.1]: at Object.<anonymous> (/app/app.js:97:14)
2021-12-25T15:02:23.667357+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:1072:14)
2021-12-25T15:02:23.667357+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
2021-12-25T15:02:23.667358+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:937:32)
2021-12-25T15:02:23.667358+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:778:12)
2021-12-25T15:02:23.667358+00:00 app[web.1]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
2021-12-25T15:02:23.667359+00:00 app[web.1]: at internal/main/run_main_module.js:17:47
2021-12-25T15:02:24.059553+00:00 heroku[web.1]: Process exited with status 1
2021-12-25T15:02:24.113339+00:00 heroku[web.1]: State changed from starting to crashed
2021-12-25T15:04:27.000000+00:00 app[api]: Build started by user soniyajaiswal995@gmail.com
2021-12-25T15:04:55.732410+00:00 app[api]: Release v7 created by user soniyajaiswal995@gmail.com
2021-12-25T15:04:55.732410+00:00 app[api]: Deploy 28c347cb by user soniyajaiswal995@gmail.com
2021-12-25T15:04:55.964469+00:00 heroku[web.1]: State changed from crashed to starting
2021-12-25T15:04:58.000000+00:00 app[api]: Build succeeded
2021-12-25T15:04:58.661868+00:00 heroku[web.1]: Starting process with command `node app.js`
2021-12-25T15:04:59.859458+00:00 app[web.1]: Sat, 25 Dec 2021 15:04:59 GMT express-session deprecated req.secret; provide secret option at app.js:27:9
2021-12-25T15:04:59.860069+00:00 app[web.1]: Warning: connect.session() MemoryStore is not
2021-12-25T15:04:59.860070+00:00 app[web.1]: designed for a production environment, as it will leak
2021-12-25T15:04:59.860070+00:00 app[web.1]: memory, and will not scale past a single process.
2021-12-25T15:04:59.869458+00:00 app[web.1]: /app/node_modules/passport-oauth2/lib/strategy.js:87
2021-12-25T15:04:59.869466+00:00 app[web.1]: if (!options.clientID) { throw new TypeError('OAuth2Strategy requires a clientID option'); }
2021-12-25T15:04:59.869466+00:00 app[web.1]: ^
2021-12-25T15:04:59.869467+00:00 app[web.1]:
2021-12-25T15:04:59.869467+00:00 app[web.1]: TypeError: OAuth2Strategy requires a clientID option
2021-12-25T15:04:59.869467+00:00 app[web.1]: at Strategy.OAuth2Strategy (/app/node_modules/passport-oauth2/lib/strategy.js:87:34)
2021-12-25T15:04:59.869467+00:00 app[web.1]: at new Strategy (/app/node_modules/passport-google-oauth20/lib/strategy.js:52:18)
2021-12-25T15:04:59.869468+00:00 app[web.1]: at Object.<anonymous> (/app/app.js:66:14)
rror code=H10 desc="App crashed" method=GET path="/" host=agile-journey-27742.herokuapp.com request_id=aa9d093d-d785-4933-9c55-b9ce42ed5075 fwd="110.227.56.110" dyno= connect= service= status=503 bytes= protocol=https
2021-12-25T15:05:06.063156+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=agile-journey-27742.herokuapp.com request_id=231a0059-325c-4e81-b20d-20c70a8065d3 fwd="110.227.56.110" dyno= connect= service= status=503 bytes= protocol=https发布于 2021-12-25 16:46:55
1.尝试设置这种类型的目录结构
|__client/ THIS IS EVERYTHING FROM THE REACT SIDE
|__ node_modules/
|__ tons of stuff...
|__ public/
|__ index.html
|__ favicon.ico
|__ etc.
|__ src/
|__ index.js
|__ main/
|__ App.js
|__ etc.
|__ models/
|__ user.js
|__ todo.js
|__ etc.
|__ node_modules/
|__ stuff...
|__ routes
|__ userRoutes.js
|__ todoRoutes.js
|__ etc.
|__ .gitignore
|__ package.json
|__ server.js
|__ etc.2.请添加此中间件
// ... Other imports
const path = require("path");
// Other app.use middleware
app.use(express.static(path.join(__dirname, "client", "build")));
// Right before your app.listen(), add this:
app.get("*", (req, res) => {
res.sendFile(path.join(__dirname, "client", "build", "index.html"));
});
app.listen(...);package.json 3.基于部署服务器向客户端的添加代理
"proxy": "http://localhost:8000"所以,你的package.json文件看起来.
{
"name": "client",
"version": "0.1.0",
"private": true,
"dependencies": {
"axios": "^0.17.1",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-scripts": "1.0.17"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"proxy": "http://localhost:8000"
}4.在网站上设置环境变量:
A. Open your app in Heroku
B. Go to "Settings"
C. Click "Reveal Config Vars"
D. Add a new variable and click "Add". Done!
E. Your port has to look like:- process.env.PORT || 8000你的港口看起来是这样的
const port = process.env.PORT || 8000;
.
.
.
app.listen(port);5.设置MongoDB Atlas IP访问控制
接下来,您需要白名单您的IP地址,以便您可以访问您的集群。转到导航菜单上的网络访问,并添加IP地址。您可以添加当前IP地址,也可以添加允许从任何地方访问。确认了你的选择。
对于通过Heroku部署的任何项目,您必须从任何地方选择“允许访问”。这是因为Heroku使用动态IP。虽然这不是最安全的选择,但目前还可以。
添加此脚本( start heroku-postbuild 和 engines )
在所有这些之后,您的服务器的package.json应该如下所示:在终端中键入node -v。它应该会说出您正在使用的Node.js版本。在"engines": "14.17.5"中添加此版本
{
"name": "mern-to-heroku",
"version": "1.0.0",
"main": "server.js",
"license": "MIT",
"dependencies": {
"body-parser": "^1.18.2",
"express": "^4.16.2",
"mongoose": "^4.13.6",
"morgan": "^1.9.0"
},
"scripts": {
"start": "node server.js",
"heroku-postbuild": "cd client && npm install --only=dev && npm install && npm run build"
},
"engines": {
"node": "14.17.5"
}
}现在,您应该准备好通过Heroku部署您的站点!
发布于 2021-12-27 09:04:28
问题是你的应用程序找不到谷歌客户端ID。
在Heroku中,您似乎没有正确地配置.env变量。解决办法真的很简单。
DOTENV方法如果您已经以这种方式定义了您的.env,
MONGO_URL="xxx.....xxx"
GOOGLE_CLIENT_ID="xx......xxx"
GOOGLE_CLIENT_SECRET="xxx.....xxx"在你的护照设置和数据库设置中,
require('dotenv').config();
.
.
.
passport.use(
new GoogleStrategy
(
{
clientID : process.env.GOOGLE_CLIENT_ID,
clientSecret : process.env.GOOGLE_CLIENT_SECRET,
callbackURL : '/auth/google/callback'
},
.
.
.然后,您必须在计算机上的项目根目录中声明了一个.env文件。
您的.gitignore文件可能会提到.env,因为这是标准的方法(不将env变量推送到公共/团队存储库)。
它在您的计算机上工作的原因是,应用程序具有环境变量的上下文。在Heroku中,由于.env文件不存在,应用程序不知道在哪里可以找到它们。
您所要做的就是向Heroku添加环境变量。只需转到Heroku仪表板中的设置,转到Config变量菜单。
以格式添加env变量
重启迪诺号。
这会解决你的问题。
发布于 2021-12-28 04:19:32
app.js 1.在中添加此中间件
app.use(express.static(path.join(__dirname, "public")));2.文件夹结构
|__public/
|__ css/
|__ css files...
|__ js/
|__ js files...3.以这种方式导入
现在,将路径设置为公共目录,在导入时必须给出路径公用文件夹。
<link rel="stylesheet" href="/css/main.css" />
<script src="/js/main.js" crossorigin="anonymous"> </script>现在您应该全部设置为访问CSS文件。
https://stackoverflow.com/questions/70480971
复制相似问题