大家好,我是heroku的新手,在网上部署网站对我来说是很新的。每次在cmd行客户端中执行heroku推送时,我都会收到一条错误消息: Error:‘./../..env’。
我有一个.env文件,其中包含用于mongoDB的连接字符串和一个秘密密钥。我不想把它推到远程服务器上。所以我把它包含在git.ignore文件中。我认为这就是造成问题的原因。它说它找不到.env文件,我认为这是因为它不在git远程上。但是,我如何才能部署站点,而不必将我不想公开的信息推送到.env文件中呢?我不想为了让它发挥作用而把它推到git上,因为这样做违背了目的。
在创建.env文件之前,我有一个带有module.exports对象的配置文件,其中包含连接字符串和秘密密钥。但是这不起作用,我一直得到相同的错误,当时没有找到.config模块。因此,我在线查看并找到了教程,说明如果我安装dotenv包并使用一个.env文件,而不是使用该文件就可以了。但是,我只使用.env文件就得到了完全相同的错误。所以我觉得没什么不同。
下面是index.js文件和package.json文件。.env文件中唯一的内容是我的数据库连接字符串和秘密密钥。
index.js文件`
const dotenv = require("dotenv");
dotenv.config({ path: "./.env" });
const { ApolloServer, PubSub } = require("apollo-server");
const mongoose = require("mongoose");
const typeDefs = require("./graphql/typeDefs");
const resolvers = require("./graphql/resolvers");
const pubsub = require("graphql-subscriptions");
const PORT = process.env.port || 5000;
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => ({ req, pubsub }),
});
mongoose
.connect(process.env.MONGODB_URI, { useNewUrlParser: true })
.then(() => {
console.log("MongoDB Connected");
return server.listen({ port: PORT });
})
.then((res) => {
console.log(`Server running at ${res.url}`);
})
.catch((err) => {
console.error(err);
});`
Package.json文件`
{
"name": "social-media-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"serve": "node index",
"start": "node index"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"apollo-server": "^3.10.2",
"bcryptjs": "^2.4.3",
"dotenv": "^16.0.3",
"graphql": "^16.6.0",
"graphql-subscriptions": "^2.0.0",
"jsonwebtoken": "^8.5.1",
"mongoose": "^6.6.4",
"react": "^18.2.0",
"react-dom": "^18.2.0"
}
}`
以下是我在客户端按下时一直收到的错误消息。我把它放在烤箱里,因为它很长。
发布于 2022-11-21 06:08:44
转到设置选项卡。在Config中,单击Reveal Config Vars并键入变量
发布于 2022-11-21 08:01:31
Heroku建议使用配置vars函数,而不将.env或其他东西保存到文件中。
如果您将配置保存为文件,请小心,因为机密信息可能会在公共存储库中披露。
请参阅Heroku的文章:https://devcenter.heroku.com/articles/config-vars
https://stackoverflow.com/questions/74514782
复制相似问题