所以我正在使用discord.py库学习python并与机器人一起玩。这些机器人需要API令牌,我想将服务器上的功能机器人与正在使用的测试机器人分开。
我的环境将通过master分支和dev分支进行设置。我希望master分支的代码库可以与Test Bot
一起使用,而Development分支的代码库可以与Test Bot Dev
一起使用。我的想法是将API令牌变量存储在未跟踪的文件中,然后将该文件放置在服务器上。然后在我的PC上有一个本地文件,该文件具有相同的文件,但是将变量设置为不同的标记。
但是感觉有点。我只是想知道是否有更好的标准做法,适用于以下情况:要使用一个存储库作为代码库,但需要为开发环境和产品环境使用不同的特定变量。这是一个令人费解的问题,因此我在通过搜索找到针对这种情况的建议方面取得了很大的成功。
答案 0 :(得分:1)
将具有所需配置文件的应用程序置于配置管理(git)下,并忽略任何(本地)替代文件。
例如,将名为.env.dist
的文件置于版本控制下,而文件.env
在同一项目的.gitignore
文件中(在同一路径中):
# dot env
/.env
让您的实用程序/机器人默认加载任何.env.dist
文件,而.env
文件将覆盖该.env.dist
文件。这样,您就可以记录,计划和定义所需的环境变量,同时允许用户使用所有生产凭证保留本地副本(如果需要)。
然后为您的机器人提供另一个参数,以带头加载另一个名称环境(dot env)文件。这使您可以使用任何其他配置来运行该机器人。
如果您遵循Docker CLI utility使用的环境文件的语法,则很可能具有很好的互操作性,并且可以达到这样的程度,而不会放弃您的大部分自由。
以这个为建议。
另一种方法:如果您想使用diff-utilities快速比较环境文件,那么我可以提供的一个提示是,如果您创建段(否则应该按名称对环境参数(变量)名称进行排序),给每个节的标题加上一个空行(如果不在文件顶部),一个单行#
注释,另一个具有节名# name of section
的注释和另一行#
。这为基于文本的差异工具提供了足够的食物,以使各部分彼此分开(以及与其他单行注释分开)。
#
# DISCORD API
#
DISCORD_ID
DISCORD_KEY
#
# MYSQL DATABASE
#
MYSQL_HOST
MYSQL_PASS
MYSQL_PORT
MYSQL_USER
(示例.env.dist
文件在不提供任何机密的情况下提示必需的参数)
#
# DISCORD API
#
DISCORD_ID=42
DISCORD_KEY=aefdcd8d71d200efaefdcd8d71d200ef
#
# MYSQL DATABASE
#
MYSQL_HOST=example.com
MYSQL_PASS=root
MYSQL_PORT=34732
MYSQL_USER=root
(示例性.env
文件,其中包含机密信息,并直接通过git项目中的.gitinore
排除(请勿添加!)。
将更多的“ dot env”文件添加到.git/info/exclude
中,并且/或者如果您将此整个开发系统采用的模式添加到您的全局.gitignore
中。阅读Git gignore Documentation中的描述,如何使用(多级)gitignore,以及何时不忽略任何文件(即使已指定)。