返回介绍

Elasticsearch 配置

发布于 2025-01-02 21:53:57 字数 1731 浏览 0 评论 0 收藏

将 Elasticsearch 集成到本应用是展现 Flask 魅力的绝佳范例。 这是一个与 Flask 没有任何关系的服务和 Python 包,然而,我将从配置开始将它们恰如其分地集成,我先在 app.config 模块中实现这样的操作:

config.py :Elasticsearch 配置。

class Config(object):
    # ...
    ELASTICSEARCH_URL = os.environ.get('ELASTICSEARCH_URL')

与许多其他配置条目一样,Elasticsearch 的连接 URL 将来自环境变量。 如果变量未定义,我将设置其为 None ,并将其用作禁用 Elasticsearch 的信号。 这主要是为了方便起见,所以当你运行应用时,尤其是在运行单元测试时,不必强制 Elasticsearch 服务启动和运行。 因此,为了确保服务的可用性,我需要直接在终端中定义 ELASTICSEARCH_URL 环境变量,或者将它添加到 .env 文件中,如下所示:

ELASTICSEARCH_URL=http://localhost:9200

使用 Elasticsearch 面临着非 Flask 插件如何使用的挑战。 我不能像在上面的例子中那样在全局范围内创建 Elasticsearch 实例,因为要初始化它,我需要访问 app.config ,它必须在调用 create_app() 函数后才可用。 所以我决定在应用程序工厂函数中为 app 实例添加一个 elasticsearch 属性:

app/__init__.py :Elasticsearch 实例。

# ...
from elasticsearch import Elasticsearch

# ...

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    # ...
    app.elasticsearch = Elasticsearch([app.config['ELASTICSEARCH_URL']]) \
        if app.config['ELASTICSEARCH_URL'] else None

    # ...

为 app 实例添加一个新属性可能看起来有点奇怪,但是 Python 对象在结构上并不严格,可以随时添加新属性。 你也可以考虑另一种方法,就是定义一个从 Flask 派生的子类(可以叫 Microblog ),然后在它的 __init__() 函数中定义 elasticsearch 属性。

请留意我设计的 条件表达式 ,如果 Elasticsearch 服务的 URL 在环境变量中未定义,则赋值 Noneapp.elasticsearch

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。