环境变量
Masonite里的环境变量定义在一个 .env
文件中,项目需要的所有环境变量都应当在这个文件中。
当服务初次启动的时候,可以有多个环境变量文件加载。 不同的运行环境(本地环境、测试环境、和生产环境),变量值最好不同。
更多的全局变量应当可以通过你的团队传给像Stripe和Mailgun这样的第三方服务,这有助于诸如数据库连接和不同的数据仓库驱动等更进一步的数据交互。
接下来的我们一起来看一下如何配置环境
安全
各个项目的环境变量应当放在自己项目目录下的 .env
文件中。
注意:永远不要把任何
.env
文件放到源码管理中去。因为这个文件中有一些敏感证书和数据,当有人从你的仓库中获得这个文件的时候,会造成安全风险。
这就是为什么要默认把 .env
和 .env.*
写入到项目的 .gitignore
文件中,这样你就不用担心意外地把这些文件放到源码管理中去。
让我们开始吧
在新建一个Masonite项目的时候,在项目根目录下有一个 .env.example
文件,它定义了这个应用最少的共有配置变量值。在创建项目的过程中,这个文件的内容会被复制到 .env
文件中。
如果你新建的Masonite项目的没有 .env
文件,你可以手动创建 .env
文件并复制 .env-example
文件里的内容粘贴到 .env
中去。
加载顺序
环境文件以这样的顺序加载:
-
Masonite 会将项目根目录下的
.env
文件加载到 Python 环境中。 -
Masonite 会查看已加载的
.env
文件中的APP_ENV
变量,如果该变量已定义,就会尝试加载.env.{APP_ENV}
文件到环境中。
举个例子,如果 APP_ENV
设置为 local
,Masonite 会另外再加载 .env.local
环境文件。
.env
APP_ENV=local
服务器就绪后,所有这些变量会加载到当前环境中,供 Masonite 配置文件访问或直接使用 env()
辅助方法访问。
定义变量
如果变量包含空格,请使用双引号将变量值包起来:
APP_NAME="Masonite test project"
读取变量
os.getenv()
你可以使用 Python 的标准方法 os.getenv()
读取环境变量值。像这样:
import os
is_debug = os.getenv("APP_DEBUG") #== "True" (str)
请注意这个方法不会转换类型,所以此处得到的是字符串而非布尔值。
env()
你也可以使用 Masonite 辅助函数 env
来读取环境变量值。像这样:
from masonite import env
is_debug = env("APP_DEBUG", False) #== True (bool)
请注意,如果环境变量未定义,你可以指定一个默认值。默认的值是 ""
.
方便起见,这个辅助方法会转换类型。以下是类型转换的一些例子:
环境变量值 | 转换成的(类型) |
---|---|
5432 | 5432 (int) |
true | True (bool) |
None (None) |
|
"" | "" (str) |
True | True (bool) |
false | False (bool) |
False | False (bool) |
smtp | smtp (string) |
如果你不想要转换类型,可以提供第三个参数 cast=False
:
from masonite import env
env('APP_DEBUG', False, cast=False) #== "False" (str)
读取当前环境
当前的 Masonite 环境通过 .env
文件的 APP_ENV
变量定义。你可以通过 Masonite 的 environment()
辅助函数获取:
APP_ENV=local
app.environment() #== local
运行测试时,环境会设为 testing
。
使用 is_running_tests()
辅助函数可以检查当前环境是否为 testing
:
app.is_running_tests() #== True if running tests
你也可以这样检测当前环境是否为生产环境:
app.is_production() #== True if APP_ENV=production
调试模式
调试模式由 APP_DEBUG
环境变量控制,由 config/application.py
配置文件中调用。
当创建新项目时,调试模式是开启的(APP_ENV=True
)。本地开发应该保持弃用状态。
调试模式开启时,所有异常(或者路由没找到)都会被渲染成 HTML 错误页面,页面中包含很多有助于调试解决问题的信息。如果禁用,则会渲染成默认的 500
、404
、403
错误页面。
你可以通过 is_debug()
或者 config
辅助函数,检测调试模式是否启用。
app.is_debug() #== True
from masonite.configuration import config
config("application.debug") #== True
注意:不要生产环境部署中启用调试模式!这样可能导致敏感数据和环境变量泄露。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。