Mozilla为Iodide扩展Redash
项目描述
概述
- 继承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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ef2e41cbd3a9fe947578d4dce634f8a1733ccb9a90e96f037f1ab20add4882f3 |
|
MD5 | e464cbce7e822700be2a0343d883e4c4 |
|
BLAKE2b-256 | d65b20dba842ad6e88960d50b6eeabbc5157721308c6ac977d54d2ba224b25dc |
redash_iodide-2020.1.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 44ab6e33df2aa0826b6210c391b2c146d6c00d4aaef0e722a50da483abdc20d0 |
|
MD5 | 12773a9c31b745e58a3197010357f781 |
|
BLAKE2b-256 | ef1972d6a1444615408055d3d58eba971936ad8330fb199d58e0eacfab658664 |