跳转到主要内容

Mozilla为Iodide扩展Redash

项目描述

Redash扩展Iodide.

https://circleci.com/gh/iodide-project/redash-iodide.svg?style=svg https://codecov.io/gh/iodide-project/redash-iodide/branch/master/graph/badge.svg CalVer - Timely Software Versioning

概述

继承Redash的Docker设置

redash-iodide使用Redash自己的Docker镜像进行开发以实现开发/生产一致性,并在各方面进行扩展,例如自定义的docker-compose配置,自定义的docker-entrypoint脚本。

在继续之前,请查阅Redash Docker安装指南。了解这些基础知识非常重要,因为许多关于redash-iodide的决定都源自它。谢谢。

在/extension下挂载

当前工作目录(包含此README.rst的目录)由docker-compose在Docker容器内挂载到路径/extension

与Redash在/app下运行

因为它重用了Redash的Docker镜像,所以您可以在Docker容器内的/app目录下找到所有的Redash设置。

使用Redash的“入口点”进行发现

Redash发现新扩展的方式是通过使用所谓的“入口点”,即Python包的元数据,这些元数据在Python包中指定并分发,Redash在运行时读取这些元数据以找到Redash扩展的文件系统位置。

这对于三种类型的入口点是正确的:

redash.extensions

用于扩展Redash Flask应用的Python可调用函数,例如 redash_iodide.explore.extension:extension

redash.bundles

包含webpack构建过程所需额外前端文件的Python包,例如 redash_iodide.explore

redash.periodic_tasks

返回周期性Celery任务参数的Python可调用函数。

Webpack钩子

由于Redash扩展(如redash-iodide)也可以提供额外的Webpack包,开发设置会定期运行Redash的扩展包脚本,以将文件从redash-iodide复制到webpack可以获取它们的地方(/app/client/app/extensions)。

有关更多信息,请参阅下方的webpack开发服务器部分。

开发工作流程

我们提供了一些便利的Make任务,可以从您的宿主机(而不是Docker容器内)运行,以简化此非平凡的应用程序设置。

构建和更新本地Docker镜像

以下许多辅助工具会隐式运行docker-compose来启动Redash容器,如果在不存在的情况下,会自动构建本地Docker镜像。

如果您想单独构建本地Docker镜像或想获取Redash基础Docker镜像的最新版本,例如在Redash新版本发布或其他此项目更改的情况下,请运行以下命令:

make build
幕后

这将运行 docker-compose build --pull,这将拉取docker-compose设置中使用的Docker镜像的更新,包括Redash、Redis和Postgres镜像。

创建数据库

在命令行中运行此命令 一次 以创建Redash/redash-iodide设置的数据库

make database

这使用了Redash自己的能力,而redash-iodide只是设置为重用它。

幕后

这将运行docker-compose来创建运行Redash Python服务器(以及Redis和Postgres容器)的服务器容器。

然后它会初始化Redash所需的Postgres表。

安装npm模块

然后我们在服务器容器内安装Redash npm模块

make node_modules
幕后

这将在服务器的 /app 目录内运行 npm install,这是Redash代码所在的目录,来自Redash Docker基础镜像。

注意,redash-iodide开发设置将 /app/node_modules 目录挂载为单独的Docker卷,将由Docker维护,不会在运行Docker的宿主机上显示或传输。

启动容器

要启动整个Docker容器集以创建工作环境(Redash服务器、Celery工作进程、Redis、Postgres),您只需运行以下命令:

make up
幕后

这很简单地运行 docker-compose up,以启动redash-iodide Docker设置的容器。

注意:这 需要 在容器中安装npm模块并创建数据库!

运行webpack开发服务器

如果您正在开发包含额外webpack包的Redash扩展(这将需要包含在Redash的webpack构建过程中,以在客户端应用程序包中发货),您将想要使用webpack开发服务器。

该系统会在文件发生变化时自动编译 Redash 客户端应用程序包,并通过运行在 8080 端口上的代理(而不是 Redash 的常用端口 5000)代理 Redash 服务器请求。

根据上面步骤的说明启动容器后,打开第二个终端并 额外运行

make devserver
幕后

这将启动另一个服务器容器实例中的 webpack devserver(不是运行 make up 时的那个),并运行一个脚本,该脚本监听 /extension 目录中 .js.jsx 文件的变化。

检测到变化时,它会自动运行 Redash 的 bundle-extensions 脚本,该脚本将更改的扩展文件复制到 /app/client/app/extensions 目录,从而触发 webpack devserver 重新编译客户端应用程序包。

注意:这需要通过 http://localhost:8080/ 而不是 http://localhost:5000/ 打开 Redash 实例,以通过 webpack devserver。

启动 Shell

如果您需要在服务器容器内部进行任何调试或文件系统检查,可以通过运行以下命令创建一个 bash shell:

make bash
幕后

您在此处对 /extension 目录之外所做的任何更改(该目录作为 Docker 卷挂载,挂载到 Docker 主机机器上的当前工作目录)以及以下目录都不会持久化。

容器内挂载为 Docker 卷的目录列表

/extension

将主机机器上的当前工作目录(此 README.rst 所在位置)映射到扩展开发。

/home/redash/.cache

由 pip 和其他脚本使用

/app/client/dist

保留 webpack 构建结果的目录,以便连续运行时 webpack 构建更快。

/home/redash/.local

“用户安装”的 Python 软件包的目录。如果您愿意,可以使用 Docker 容器用户 Redash 简单地安装额外的 Python 软件包,使用 pip install --user <package>。这些软件包安装的脚本将在 /home/redash/.local/bin 下找到,但也自动添加到 PATH 中。

/app/node_modules

npm 模块的目录,在容器中的 /app 内运行 npm install 时安装。保留以在连续运行之间利用本机 npm 缓存。

运行测试

运行基于 Python 的测试需要首先创建一个单独的数据库(通过 test_database Make 任务实现)然后在容器内运行测试运行器。测试数据库与常规开发中使用的数据库不同(例如,不要覆盖开发数据)。

目前不支持前端或集成测试。

要从主机运行测试,请运行

make test

这将在运行测试之前自动运行 test_database Make 任务。

幕后

当启动测试运行器时,它将使用常规服务器容器,但还将 REDASH_DATABASE_URL 环境变量设置为测试数据库,以防止覆盖您通过常规 Redash 界面(例如,数据源、查询等)添加到数据库中的任何数据。

默认情况下,它使用 pytest/extension 中运行 Python 测试,并使用在 pytest.ini 中定义的参数。

如果您想向 pytest 添加更多参数,只需将命令行参数附加到 pytest.ini 中。

或者,例如,如果您想使用 pdb 调试测试,请这样做

从主机机器创建测试数据库

make test_database

在容器中启动 Bash shell

创建bash

在容器中设置环境变量 REDASH_DATABASE_URL

导出 REDASH_DATABASE_URL="postgresql://postgres@postgres/tests"

切换到扩展代码目录

cd /extension

使用任何参数运行测试

pytest -vvv --pdb

问题 & 询问

查看GitHub上的问题跟踪器,如有关于Redash-iodide的问题或疑问,请提交工单。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

redash-iodide-2020.1.0.tar.gz (25.0 kB 查看哈希值)

上传时间

构建分布

redash_iodide-2020.1.0-py2.py3-none-any.whl (16.8 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下提供支持