环境变量

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

环境

简介

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)

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/us...

译文地址:https://learnku.com/docs/masonite/2.3/us...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~