如何在设备Neves上复制crt文件

时间:2019-05-19 17:21:40

标签: elixir mqtt nerves-project

我要复制ca文件以建立ssl连接。我将ca放在lib

lib/
   mymodule.ex #using the ca path here
   mycrt.crt

然后使用mix firmware我给出这样的相对路径

 def getPath() do
    {path,0} = System.cmd("pwd",[])
    String.replace(path,"\n","/lib/mycrt.crt")
   end

但是我们使用iex -S mix在主机上运行,​​因此我必须在/lib之前将mycrt.crt前缀

我不确定在设备上刻录后是否正确地将其复制到/lib中或pwd是否获得正确的路径。这是正确的做法吗?因为当我在设备上执行ls时,看不到mycrt.crt复制到目录中

使用神经通过设备复制文件的正确方法是什么

1 个答案:

答案 0 :(得分:2)

使用lib代替priv,所以:

priv/mycrt.crt

然后输入代码:

Path.join(:code.priv_dir(:my_app), "mycrt.crt")

请参见https://erlang.org/doc/man/code.html#priv_dir-1

或者,您可以使用模块属性在编译时读取文件内容:

@crt_bin File.read!("lib/mycrt.crt")

无论您是只希望文件在目标机上可用,还是想要模块属性版本,我都建议将文件存储在priv中:http://erlang.org/doc/design_principles/applications.html#7.4。特别是:

  
      
  • priv-可选。用于特定于应用程序的文件。
  •   

和:

  

priv目录保存应用程序在执行过程中需要的资产   运行。可执行文件应驻留在priv / bin中并动态链接   库应位于priv / lib中。其他资产可以自由居住   在priv目录中,但建议在   有条理的方式。