graalvmjs cube.js 集成简单说明

发布时间 2023-10-23 10:20:55作者: 荣锋亮

实际上我以前也简单写过关于graalvm 集成cube.js 的,最近graalvmjs 提供了独立的模块,我基于独立包创建了一个docker 镜像
尽管cube.js 也提供了docker 镜像,但是相对来说有点太重(包含了比较多的组件,同时很多是不需要的),很多时候我们是需要
自己基于扩展开发的,以下是一个简单的集成(实际上就是替换nodejs 基础镜像为graalvmjs的镜像)

参考配置

  • Dockerfile
 
FROM node:16.20.2-bullseye-slim as builder
WORKDIR /app
ENV NODE_ENV production
COPY package.json /app/package.json
COPY index.js /app/index.js
RUN npm install 
 
FROM dalongrong/graaljs:23.1.0
WORKDIR /app
ENV NODE_ENV production
 
COPY --from=builder /app/node_modules /app/node_modules
COPY --from=builder /app/index.js /app/index.js
COPY model /app/model
ENTRYPOINT [ "node","index.js" ]
  • index.js
const CubejsServer = require('@cubejs-backend/server');
 
const server = new CubejsServer({});
 
server.listen().then(({ version, port }) => {
  console.log(`? Cube server (${version}) is listening on ${port}`);
}).catch(e => {
  console.error('Fatal error during server start: ');
  console.error(e.stack || e);
});
  • 运行效果

 

说明

基于graalvmjs 的运行,是一个不错的选择,尤其是需要基于jvm 相关的依赖的时候,实际上我以前也写过实际上可以基于graalvmjs 开发独立的jdbc 驱动,替换默认的基于node addon 的实现,开发以及灵活性上会好很多

参考资料

https://www.cnblogs.com/rongfengliang/p/17716815.html
https://github.com/rongfengliang/cube-test/blob/graalvm/Dockerfile
https://github.com/oracle/graaljs/releases/
https://github.com/rongfengliang/cube-test/tree/graalvm