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

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

时间:2024-01-03 12:33:03浏览次数:31  
标签:github nif 扩展 version precompiled https config 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
version = Mix.Project.config()[:version]
  • 官方示例的一个效果

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

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

 

mjml-nif 的使用

  • 效果

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

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

 

  • 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
mix_config = Mix.Project.config()

说明

开源项目使用,推荐与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,config,rustler
From: https://blog.51cto.com/rongfengliang/9082148

相关文章

  • 彻底取消unigui的/server页面及扩展应用(78)
    unigui的应用默认会在/server显示相关信息,unigui编译的应用能不能简单设置就可以取消/server页面?经验证,在UniServerModule.UniGUIServerModuleHTTPCommand拦截/server就可以取消server页面:procedureTUniServerModule.UniGUIServerModuleHTTPCommand(ARequestInfo:TIdHTTPRequ......
  • 删除vCenter上的插件和扩展(Client Plug-Ins & vCenter Server Extensions)
    删除vCenter上的插件和扩展(ClientPlug-Ins&vCenterServerExtensions)删除vSphere界面扩展插件vSphereClient-Administration-ClientPlug-Ins列出了插件状态。1.使用root账号SSH登录到vCSA服务器2.切换目录:-ForvCenterServer6.x,switchtothecd/etc/vmwar......
  • SciTech-BigDataAIML-Jupyter- 扩展Jupyter Notebook 的文档 Extending the Notebook
    https://jupyterlab-lsp.readthedocs.io/en/latest/Installation.htmlhttps://github.com/jupyter-lsp/jupyterlab-lspDocs»ExtendingtheNotebook»CustomrequesthandlersEditonGitHubNoteYouarenotreadingthemostrecentversionofthisdocumentation.......
  • 英语一课一练一年级扩展阅读03the Little Mermaid-小美人鱼
    PDF格式公众号回复关键字:YYYKYLY03记忆树1Hello,everybody.I’mAriel,thelittlemermaid.翻译大家好.我是Ariel,小美人鱼简化记忆美人鱼句子结构1打招呼(Greeting):"Hello,everybody."是一个简短的问候语,使用"Hello"向大家问好,"everybody"是名词短语,作为"......
  • 彻底取消unigui的/server页面及扩展应用(78)
    https://www.cnblogs.com/qiufeng2014/p/14779399.htmlunigui的应用默认会在/server显示相关信息,unigui编译的应用能不能简单设置就可以取消/server页面?经验证,在UniServerModule.UniGUIServerModuleHTTPCommand拦截/server就可以取消server页面:procedureTUniServerModule.Un......
  • 谷歌云 | Dataflow 和 Vertex AI:可扩展高效的模型服务
    【CloudAce云一 是GoogleCloud全球战略合作伙伴,在亚太地区、欧洲、美洲和非洲拥有二十多个办公室。CloudAce在谷歌专业领域认证及专业知识目前排名全球第一位,并连续多次获得GoogleCloud各类奖项。作为谷歌云托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认......
  • 谷歌云 | Dataflow 和 Vertex AI:可扩展高效的模型服务
    如果您考虑使用VertexAI来训练和部署您的模型,那您选对了!数据对于机器学习至关重要,模型拥有的数据量越大,质量越高,模型的性能就会越好。在训练模型之前,数据必须经过预处理,这意味着清洗、转换和聚合数据,使其成为模型可以理解的格式。数据预处理在模型服务时也很重要,但由于实时流数......
  • Google 2023年最受欢迎的Chrome浏览器扩展
    前言Google最近发布了2023年最受欢迎的Chrome浏览器扩展插件,总计包括了12款扩展:可在此处下载其中包含多款AI驱动的扩展插件上榜,快来看看有你经常用的吗?插件汇总插件下载Scribe:使用AI记录工作流程,并创建分步指南,轻松培训和指导同事。DeepLTranslate:即时翻译网页......
  • rustler-precompiled rustler 扩展工具简单说明
    已经简单说过mjml_nif使用了rustler+rustler-precompiled进行nif的构建,同时官方也写了一篇相关的博客进行介绍使用说明配置依赖defdepsdo[{:rustler_precompiled,"~>0.7"}]end配置native使用可以是一个独立的模块,命名上可......
  • rustler 简单试用
    昨天简单说了基于mrml包装的elixirmjml_nif模块,其中使用了rustler进行elixir与rust的构建集成(基于了nif)以下是一个简单的rustler学习试用项目准备基于mix初始化初始化项目 mixnewdalong添加依赖mix.exs defpdepsdo......