由Mozilla扩展的Redash
项目描述
Redash扩展,用于sql.telemetry.mozilla.org。
或者正如它应该被称为: St. Moredash ;)
概述
- 继承Redash的Docker设置
redash-stmo使用Redash自己的Docker镜像进行开发,以实现开发/生产环境的紧密一致性,并在各个方面进行扩展,例如,拥有自己的docker-compose配置,自己的docker-entrypoint脚本。
特别地,它使用Mozilla的“rc”标签版本的Redash Docker镜像,包括(在撰写本文时,2019-06-13)许多来自Mozilla的伪临时和定期更新的Redash分叉的定制。每当从上游Redash发生“rebase”时,都会更新“rc”标签的Docker镜像,并将其放在Mozilla服务器上的“release”Redash环境中进行测试。
在继续之前,请查看Redash Docker安装指南。了解这些基础知识很重要,因为redash-stmo的许多决策都源于它。谢谢。
- 挂载于/extension下
当前工作目录(包含此README.rst的目录)由docker-compose在Docker容器内挂载到路径/extension。
- 与Redash在/app下运行
由于它重用了Redash Docker镜像,您可以在Docker容器内的/app目录下找到所有Redash设置。
- 使用Redash的“entrypoints”进行发现
Redash发现新扩展的方式是通过使用Python包的所谓“入口点”,这是一种在Python包中指定并分发的元数据,Redash在运行时读取它以找到Redash扩展的文件系统位置。
这适用于三种类型的入口点
- redash.extensions
用于扩展Redash Flask应用的Python可调用函数,例如 redash_stmo.data_sources.health:extension。
- redash.bundles
包含webpack构建过程中所需额外前端文件的Python包,例如 redash_stmo.data_sources.link。
- redash.scheduled_jobs
返回用于计划RQ作业参数的Python可调用函数,例如 redash_stmo.data_sources.health:scheduled_job。
- Webpack钩子
由于Redash扩展(如redash-stmo)也可以提供额外的Webpack包,开发设置会定期运行Redash的bundle-extension脚本,将文件从redash-stmo复制到webpack可以取到的正确位置(/app/client/app/extensions)。
有关更多信息,请参阅下面的webpack开发服务器部分。
开发工作流程
我们提供了一些方便的Make任务,您可以从主机机器上运行它们(而不是在Docker容器内)以简化此非平凡的应用程序设置。
构建和更新本地Docker镜像
以下许多助手会隐式运行docker-compose来启动Redash容器,如果本地Docker镜像不存在,则自动构建它。
如果您想单独构建本地Docker镜像或想获取最新的基本Redash Docker镜像版本(或Mozilla Redash分叉的子镜像),例如在Mozilla工作人员进行新的rebase事件中,请运行以下命令
make build
- 幕后
这将运行 docker-compose build --pull,这将拉取docker-compose设置中使用的Docker镜像的更新,包括Redash、Redis和Postgres镜像。
创建数据库
在命令行中运行此命令 一次 以创建Redash/redash-stmo设置的数据库
make database
这使用了Redash自身的功能,而redash-stmo只是设置为复用它。
- 幕后
这将运行docker-compose来创建运行Redash Python服务器(以及Redis和Postgres容器)的服务器容器。
然后初始化Redash所需的Postgres表。
安装npm模块
然后我们在服务器容器内安装Redash npm模块
make node_modules
- 幕后
这将在服务器的 /app 目录中运行 npm install,这是Redash Docker基础镜像中的Redash代码目录。
注意,redash-stmo开发设置将 /app/node_modules 目录挂载为一个单独的Docker卷,将由Docker维护,不会在Docker运行的主机机器中显示或传输。
启动容器
要启动用于工作环境的整个Docker容器集(Redash服务器、RQ工作器、Redis、Postgres),您只需运行此命令
make up
- 幕后
这非常简单,就是运行 docker-compose up,以启动redash-stmo Docker设置的容器。
注意:这 需要 在容器内安装npm模块并创建数据库!
运行webpack devserver
如果您正在开发一个包含额外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
make bash
- 在容器中设置REDASH_DATABASE_URL环境变量
export REDASH_DATABASE_URL="postgresql://postgres@postgres/tests"
- 切换到扩展代码目录
cd /extension
- 使用任何参数运行测试
pytest -vvv --pdb
问题和疑问
有关Redash-STMO的问题或疑问,请访问GitHub上的问题跟踪器提交工单。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。