无法将 postgres/react 应用程序部署到 Heroku
Unable to deploy postgres/react application to Heroku
我已经被困了一段时间了,我似乎无法弄清楚这个错误是什么。将我的应用程序部署到 Heroku,构建成功,我正在取回静态文件,但问题是应用程序无法连接到 Heroku sql 服务器。这些是我目前遇到的错误。
2021-02-19T21:59:42.585708+00:00 app[web.1]: Alright you got it! running on 37052
2021-02-19T21:59:42.615527+00:00 app[web.1]: Failed to prune sessions: getaddrinfo ENOTFOUND undefined
2021-02-19T22:01:17.248861+00:00 app[web.1]: Error: getaddrinfo ENOTFOUND undefined
2021-02-19T22:01:17.248874+00:00 app[web.1]: at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
2021-02-19T22:01:17.248876+00:00 app[web.1]: errno: -3008,
2021-02-19T22:01:17.248878+00:00 app[web.1]: code: 'ENOTFOUND',
2021-02-19T22:01:17.248878+00:00 app[web.1]: syscall: 'getaddrinfo',
2021-02-19T22:01:17.248879+00:00 app[web.1]: hostname: 'undefined'
2021-02-19T22:01:17.248879+00:00 app[web.1]: }
这是我的 server.js 文件。
const express = require(`express`);
const passport = require(`passport`);
const session = require(`express-session`);
const postGresqlStore = require("connect-pg-simple")(session);
const keys = require("./config/keys");
const usersRouter = require(`./src/routes/users`);
const flash = require(`connect-flash`);
const initializePassport = require("./passportConfig");
initializePassport(passport);
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(
session({
store: new postGresqlStore({
conString: `postgres://${keys.DB_USER}:${keys.DB_PASSWORD}@${keys.DB_HOST}:${keys.DB_PORT}/${keys.DB_DATABASE}`,
}),
secret: keys.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 },
})
);
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(usersRouter);
const path = require("path");
if (process.env.NODE_ENV === "production") {
// Serve any static files
app.use(express.static("client/build"));
// Handle React routing, return all requests to React app
app.get("*", function (req, res) {
res.sendFile(path.join(__dirname, "client", "build", "index.html"));
});
}
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Alright you got it! running on ${PORT}`);
});
和我的DB.config
const keys = require(`./config/keys`);
const { Pool } = require("pg");
const devConfig = `postgres://${keys.DB_USER}:${keys.DB_PASSWORD}@${keys.DB_HOST}:${keys.DB_PORT}/${keys.DB_DATABASE}`;
const proConfig = process.env.DATABASE_URL;
const pool = new Pool({
connectionString:
process.env.NODE.ENV === `production` ? proConfig : devConfig,
});
module.exports = { pool };
有什么建议或代码的其他部分需要查看吗?
谢谢!
您需要在 db.config 中使用 process.env.NODE_ENV。这是 heroku 的默认设置。
我已经被困了一段时间了,我似乎无法弄清楚这个错误是什么。将我的应用程序部署到 Heroku,构建成功,我正在取回静态文件,但问题是应用程序无法连接到 Heroku sql 服务器。这些是我目前遇到的错误。
2021-02-19T21:59:42.585708+00:00 app[web.1]: Alright you got it! running on 37052
2021-02-19T21:59:42.615527+00:00 app[web.1]: Failed to prune sessions: getaddrinfo ENOTFOUND undefined
2021-02-19T22:01:17.248861+00:00 app[web.1]: Error: getaddrinfo ENOTFOUND undefined
2021-02-19T22:01:17.248874+00:00 app[web.1]: at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
2021-02-19T22:01:17.248876+00:00 app[web.1]: errno: -3008,
2021-02-19T22:01:17.248878+00:00 app[web.1]: code: 'ENOTFOUND',
2021-02-19T22:01:17.248878+00:00 app[web.1]: syscall: 'getaddrinfo',
2021-02-19T22:01:17.248879+00:00 app[web.1]: hostname: 'undefined'
2021-02-19T22:01:17.248879+00:00 app[web.1]: }
这是我的 server.js 文件。
const express = require(`express`);
const passport = require(`passport`);
const session = require(`express-session`);
const postGresqlStore = require("connect-pg-simple")(session);
const keys = require("./config/keys");
const usersRouter = require(`./src/routes/users`);
const flash = require(`connect-flash`);
const initializePassport = require("./passportConfig");
initializePassport(passport);
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(
session({
store: new postGresqlStore({
conString: `postgres://${keys.DB_USER}:${keys.DB_PASSWORD}@${keys.DB_HOST}:${keys.DB_PORT}/${keys.DB_DATABASE}`,
}),
secret: keys.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: { maxAge: 30 * 24 * 60 * 60 * 1000 },
})
);
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(usersRouter);
const path = require("path");
if (process.env.NODE_ENV === "production") {
// Serve any static files
app.use(express.static("client/build"));
// Handle React routing, return all requests to React app
app.get("*", function (req, res) {
res.sendFile(path.join(__dirname, "client", "build", "index.html"));
});
}
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Alright you got it! running on ${PORT}`);
});
和我的DB.config
const keys = require(`./config/keys`);
const { Pool } = require("pg");
const devConfig = `postgres://${keys.DB_USER}:${keys.DB_PASSWORD}@${keys.DB_HOST}:${keys.DB_PORT}/${keys.DB_DATABASE}`;
const proConfig = process.env.DATABASE_URL;
const pool = new Pool({
connectionString:
process.env.NODE.ENV === `production` ? proConfig : devConfig,
});
module.exports = { pool };
有什么建议或代码的其他部分需要查看吗? 谢谢!
您需要在 db.config 中使用 process.env.NODE_ENV。这是 heroku 的默认设置。