首页 > 其他分享 >rustler-precompiled rustler 扩展工具简单说明

rustler-precompiled rustler 扩展工具简单说明

时间:2023-12-29 11:26:54浏览次数:40  
标签:github nif 扩展 version precompiled https rustler

已经简单说过mjml_nif使用了rustler+rustler-precompiled 进行nif 的构建,同时官方也写了一篇相关的博客进行介绍

使用说明

  • 配置依赖
def deps do
  [
    {:rustler_precompiled, "~> 0.7"}
  ]
end
  • 配置native 使用
    可以是一个独立的模块,命名上可以添加Native 比较符合习惯
 
defmodule RustlerPrecompilationExample.Native do
  version = Mix.Project.config()[:version]
 
  use RustlerPrecompiled,
    otp_app: :rustler_precompilation_example,
    crate: "example",
    base_url:
      "https://github.com/philss/rustler_precompilation_example/releases/download/v#{version}",
    force_build: System.get_env("RUSTLER_PRECOMPILATION_EXAMPLE_BUILD") in ["1", "true"],
    targets:
      Enum.uniq(["aarch64-unknown-linux-musl" | RustlerPrecompiled.Config.default_targets()]),
    version: version
 
  # When your NIF is loaded, it will override this function.
  def add(_a, _b), do: :erlang.nif_error(:nif_not_loaded)
end
  • 官方示例的一个效果

可以看到预编译的包放在github 的release 中,下载已经使用都很方便

 

mjml-nif 的使用

  • 效果

与rustler-precompiled 官方示例效果是一样的

 

  • Native 配置
 
defmodule Mjml.Native do
  mix_config = Mix.Project.config()
  version = mix_config[:version]
  github_url = mix_config[:package][:links]["GitHub"]
 
  targets = ~w(
    aarch64-apple-darwin
    aarch64-unknown-linux-gnu
    aarch64-unknown-linux-musl
    riscv64gc-unknown-linux-gnu
    x86_64-apple-darwin
    x86_64-pc-windows-gnu
    x86_64-pc-windows-msvc
    x86_64-unknown-linux-gnu
    x86_64-unknown-linux-musl
  )
 
  nif_versions = ~w(
    2.15
    2.16
  )
 
  use RustlerPrecompiled,
    otp_app: :mjml,
    crate: "mjml_nif",
    base_url: "#{github_url}/releases/download/v#{version}",
    force_build: System.get_env("MJML_BUILD") in ["1", "true"],
    version: version,
    targets: targets,
    nif_versions: nif_versions
 
  def to_html(_mjml, _render_options), do: error()
  defp error(), do: :erlang.nif_error(:nif_not_loaded)
end

说明

开源项目使用,推荐与github action 集成起来,如果是自己的项目可以使用docker进行构建(可以方便生成好不同系统的nif 包)

参考资料

https://dashbit.co/blog/rustler-precompiled
https://hexdocs.pm/rustler_precompiled/RustlerPrecompiled.html
https://github.com/philss/rustler_precompiled
https://github.com/rusterlium/rustler
https://docs.rs/crate/rustler/latest
https://github.com/adoptoposs/mjml_nif
https://github.com/philss/rustler_precompilation_example
https://github.com/adoptoposs/mjml_nif/blob/main/.github/workflows/release.yml

标签:github,nif,扩展,version,precompiled,https,rustler
From: https://www.cnblogs.com/rongfengliang/p/17934382.html

相关文章

  • rustler 简单试用
    昨天简单说了基于mrml包装的elixirmjml_nif模块,其中使用了rustler进行elixir与rust的构建集成(基于了nif)以下是一个简单的rustler学习试用项目准备基于mix初始化初始化项目 mixnewdalong添加依赖mix.exs defpdepsdo......
  • 解析在线教育系统源码架构:构建可扩展的企业教学平台
    下文,笔者将与大家一同深入解析一种构建可扩展的企业教学平台的在线教育系统源码架构,揭示其关键设计原理和技术要点。 一、架构概览首先,让我们了解这一企业教学平台的整体架构。该系统采用了分布式架构,将各个功能模块进行了合理拆分,以实现高度的可扩展性和灵活性。以下是其主要组成......
  • WSO2是一个开源的API管理平台,它提供了一套完整的解决方案,用于设计和发布API,创建和管理
    WSO2是一个开源的API管理平台,它提供了一套完整的解决方案,用于设计和发布API,创建和管理开发人员社区,以及以可扩展的方式保护和路由API流量¹。它利用来自WSO2平台的成熟组件来保护,集成和管理API¹。此外,它还与WSO2分析平台集成,提供现成的报告和警报,让您即时了解API行为¹。WSO2API......
  • 浪潮信息G7服务器打造高效智慧算力,全新支持第五代英特尔®至强®可扩展处理器
    近日,浪潮信息多款G7服务器创新升级,全面支持英特尔最新发布的第五代至强®可扩展处理器并完成适配,通过系统架构、硬件、固件和散热等方面的创新设计,以及AI加速功能引入,G7服务器的通用计算性能提升23%,在客户工作负载中每瓦特性能提升超36%,尤其是在AI推理场景下性能提升高达 42%,实现......
  • drf之视图集类、5个视图扩展类、9个视图子类、视图集
    两个视图基类#APIView--->之前一直在用---》drf提供的最顶层的父类---》以后所有视图类,都继承自它#GenericAPIView--》继承自APIView--》封装继承APIView+序列化类+Response写接口APIView是RESTframework提供的所有视图的基类,继承自Django的View父类。APIView与View的不......
  • 范围表达式的扩展
    上面列出的是Kotlin中最常用的范围表达式。除了这些,Kotlin的范围表达式还可以被用在更多的上下文和复杂的表达式中。虽然没有其他的特殊范围表达式关键字,但是你可以利用上述工具以更多的方式使用范围:反转范围:通过使用标准库的扩展函数,可以创建一个反转的范围,例如使用.reversed()......
  • 关于集合的扩展 C#
    ///<summary>//////</summary>///<typeparamname="T"></typeparam>///<paramname="sources"></param>///<paramname="details"></param&......
  • ClickHouse 的水平扩展策略与实践
    1.背景介绍水平扩展(HorizontalScaling)是一种在数据库系统中增加服务器数量以提高系统性能的方法。在大数据时代,数据量越来越大,传统的垂直扩展方式已经无法满足业务需求。因此,水平扩展成为了一种必须要学习和掌握的技术。ClickHouse是一个高性能的列式数据库管理系统,专为OLAP类应用......
  • Thunderbolt 3 PCIe Expansion 扩展卡
    计算机目前大部分都能够提供Thunderbolt3接口了。Thunderbolt3的传输速度更快,所以我们需要把Thunderbolt3转换为SASHBA,但市场上没有这个转换设备。后来我们发现有Thunderbolt3PCIeExpansion,就是通过这个设备把Thunderbolt3转换为PCIe卡槽,然后再插上SASHBA卡,......
  • Chrome扩展程序是如何进行消息传递的
    大家好,我是dom哥。这是我关于Chrome扩展开发的系列文章,感兴趣的可以点个小星星。一个复杂的Chrome扩展程序通常由content_scripts,background,actionpopup,sidepanel,optionspage,devtools等部分组成,这些部分所负责的功能各不相同,所处的运行环境各不相同,所能访问的chrome......