我正在制作一个discord bot并尝试在Heroku上托管它 . 我正在从github部署,它部署得很好 . 我只有一个问题:discord bot使用一个必须保密的auth令牌登录,因此不在repo上,但是要求机器人登录 . 有没有人知道如何让文件不在回购,但在heroku应用程序?
编辑:我最初忘了提到这个,但我使用的是node.js和discord.io,认为这可能会有所帮助 .
您需要有一个 .env 文件,以便存储您的秘密信息 . 例如密码,在您的情况下,您将希望discord bot使用必须保密的身份验证令牌登录 .
.env
您应该知道的一件事是 .env 文件允许您捕获所需的所有配置变量,以便在本地运行您的应用程序 . 当您使用任何 heroku local 命令启动应用程序时,将读取 .env 文件,并将每个名称/值对插入到环境中,以模仿配置变量的操作 .
heroku local
这是NodeJS中的一个示例 .env 文件:
connection: { host: Env.get('DB_HOST', CLEARDB_DATABASE_URL.host), port: Env.get('DB_PORT', ''), user: Env.get('DB_USER', CLEARDB_DATABASE_URL.username), password: Env.get('DB_PASSWORD', CLEARDB_DATABASE_URL.password), database: Env.get('DB_DATABASE', CLEARDB_DATABASE_URL.pathname.substr(1)) }
现在,在部署到Heroku时,应用程序将使用配置中设置的密钥 .
另请注意,部署的 生产环境 应用程序可能连接到本地开发应用程序之外的不同服务 . 例如,您部署的 生产环境 应用程序可能具有引用Heroku Postgres / Mongo数据库的 DATABASE_URL config var,但您的本地应用程序可能在.env文件中有一个 DATABASE_URL 变量,该变量引用了Postgres / Mongo的本地安装 .
DATABASE_URL
有时您可能希望在本地和Heroku环境中使用相同的config var . 对于要添加到 .env 文件的每个config var,请在终端上使用以下命令:
heroku config:get CONFIG-VAR-NAME -s >> .env
NOTE :不应将凭据和其他敏感配置值提交给源代码控制 . 在Git中,只需从项目目录中的终端运行 .env 文件即可排除 .env 文件: echo .env >> .gitignore .
echo .env >> .gitignore
不 . 我们强烈建议您不要将 .env 文件提交给版本控制 . 它应该只包含特定于环境的值,例如数据库密码或API密钥 . 您的 生产环境 数据库应具有与开发数据库不同的密码 .
我希望这有帮助
您应该在Heroku上使用环境变量 . 如果您有密码,可以将其保存在这样的文件中(假设您的编程语言是Python):
import os ... PASSWORD = os.environ['PASSWORD']
然后,在Heroku CLI中,您可以运行以下命令:
heroku config:set PASSWORD=mypassword1234
这样您就不必将凭据存储在文件中 .
2 回答
您需要有一个
.env
文件,以便存储您的秘密信息 . 例如密码,在您的情况下,您将希望discord bot使用必须保密的身份验证令牌登录 .您应该知道的一件事是
.env
文件允许您捕获所需的所有配置变量,以便在本地运行您的应用程序 . 当您使用任何heroku local
命令启动应用程序时,将读取.env
文件,并将每个名称/值对插入到环境中,以模仿配置变量的操作 .这是NodeJS中的一个示例
.env
文件:现在,在部署到Heroku时,应用程序将使用配置中设置的密钥 .
另请注意,部署的 生产环境 应用程序可能连接到本地开发应用程序之外的不同服务 . 例如,您部署的 生产环境 应用程序可能具有引用Heroku Postgres / Mongo数据库的
DATABASE_URL
config var,但您的本地应用程序可能在.env文件中有一个DATABASE_URL
变量,该变量引用了Postgres / Mongo的本地安装 .有时您可能希望在本地和Heroku环境中使用相同的config var . 对于要添加到
.env
文件的每个config var,请在终端上使用以下命令:NOTE :不应将凭据和其他敏感配置值提交给源代码控制 . 在Git中,只需从项目目录中的终端运行
.env
文件即可排除.env
文件:echo .env >> .gitignore
.作为dotenv常见问题解答的一部分
我应该提交我的.env文件吗?
不 . 我们强烈建议您不要将
.env
文件提交给版本控制 . 它应该只包含特定于环境的值,例如数据库密码或API密钥 . 您的 生产环境 数据库应具有与开发数据库不同的密码 .我希望这有帮助
您应该在Heroku上使用环境变量 . 如果您有密码,可以将其保存在这样的文件中(假设您的编程语言是Python):
然后,在Heroku CLI中,您可以运行以下命令:
这样您就不必将凭据存储在文件中 .