环境变量
环境
简介
Masonite 中的环境在 .env
文件中定义,并且包含您所有不应公开到源代码管理中的秘密环境变量。服务器首次启动时,您可以加载多个环境文件。在本文档中,我们将逐步介绍如何配置环境变量。
切勿将任何 .env 文件加载到源代码管理中。默认情况下,
.gitignore
文件中包含.env
和.env.*
,因此您不必担心将这些文件意外地推入源代码管理。
入门
Masonite 附带了一个 LoadEnvironment
类,该类在 bootstrap/start.py
文件中调用。此文件已导入到wsgi.py
文件中,这是由于导入而实际执行环境的位置。
您可能不必使用此类,因为此类默认情况下会处理大多数用例,但我们将介绍该类本身的工作方式。
在 bootstrap/start.py
中,您将看到类似于以下内容的代码:
bootstrap/start.py
from masonite.environment import LoadEnvironment
...
LoadEnvironment()
这个类实例化做了几件事:
第一件事是它将位于应用程序基础中的 .env 文件加载到 Python 环境中。如果您是使用 craft 安装的 Masonite,则 Masonite 会基于 .env-example
文件为您自动创建这个 .env
文件。如果您安装了Masonite,但没有看到此 .env
文件,则可以手动创建它并复制并粘贴 .env-example
的内容。
接下来将要做的是在刚加载的 .env
文件中查找 APP_ENV
变量,然后查找具有该值的环境。
例如,这个变量:
.env
...
APP_ENV=local
...
将另外加载 .env.local
环境文件。
这可能有助于拥有更多全局环境变量,这些变量可以在您的团队中共享(如条带、邮件枪或应用程序键),然后具有更多开发人员特定值,如数据库连接、Mailtrap 或用于开发的不同存储驱动程序。
加载附加的环境
除了加载 .env
文件和 .env
文件中定义的其他环境文件之外,还可以通过在构造函数中指定来加载第三个环境:
.env
...
APP_ENV=local
...
bootstrap/start.py
from masonite.environment import LoadEnvironment
...
LoadEnvironment('development')
这将加载 .env
文件,.env.local
文件和.env.development
环境文件。
仅加载单个环境
如果您不想加载其他环境,而只想加载 1 个单一环境,则可以传入 only
参数。
bootstrap/start.py
from masonite.environment import LoadEnvironment
...
LoadEnvironment(only='development')
这将仅加载 .env.development
环境文件。
获取环境变量
环境变量应在 .env 文件中的每个项目基础上进行设置。服务器启动时,会将所有这些环境变量加载到当前的全局环境中。您可以通过以下两种方法之一获取这些环境变量:
os.getenv
您显然可以通过正常的 Python 方式获取它们,方法如下:
import os
os.getenv('DB_PORT') #== '5432' (string)
请注意,上面的示例是一个字符串。我们通常需要将数据类型转换为相应的类型。例如,我们需要 5432
为整数,而需要True
为布尔值。
masonite.env
我们可以使用 env()
函数代替 os.getenv()
来完成此任务。看起来像:
from masonite import env
env('DB_PORT', 'default') #== 5432 (int)
如果该值为数字,则将其转换为整数。以下是此函数将强制转换的示例:
Value | Casts to (type) |
---|---|
5432 | 5432 (int) |
true | True (bool) |
True | True (bool) |
false | False (bool) |
False | False (bool) |
smtp | smtp (string) |
如果您不希望强制转换该值,则将 false 作为第三个参数传入:
from masonite import env
env('DB_PORT', 'default', cast=False) #== '5432' (string)
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。