MirageOS - Http-fetch 示例
MirageOS - Http-fetch example
我正在尝试修改可以在 mirage-skeleton 中找到的 MirageOS http-fetch 示例 (https://github.com/mirage/mirage-skeleton),但我在理解为什么我无法移动某些config.ml 文件中执行的函数到我的 unikernel.ml 文件。原始 config.ml 文件如下(我只复制有趣的部分):
[...]
let client =
foreign "Unikernel.Client" @@ console @-> resolver @-> conduit @-> job
let () =
add_to_ocamlfind_libraries ["mirage-http"];
add_to_opam_packages ["mirage-http"];
let sv4 = stack default_console in
let res_dns = resolver_dns sv4 in
let conduit = conduit_direct sv4 in
let job = [ client $ default_console $ res_dns $ conduit ] in
register "http-fetch" job
我想做的是移动这两行:
let res_dns = resolver_dns sv4 in
let conduit = conduit_direct sv4 in
进入我的 unikernel.ml 启动方法。基本上我只想将堆栈传递给我的模块并让它创建一个 dns 解析器和一个管道。我的启动函数如下:
let start c s =
C.log_s c (sprintf "Resolving in 1s using DNS server %s" ns) >>= fun () ->
OS.Time.sleep 1.0 >>= fun () ->
let res_dns = resolver_dns s in
let conduit = conduit_direct s in
http_fetch c res_dns conduit >>= fun (data) ->
Lwt.return(dump_to_db data);
现在我在 http_fetch 参数提交时收到此错误:
Error: This expression has type Mirage.resolver Mirage.impl
but an expression was expected of type Resolver_lwt.t
我在这里问的主要是一个概念性问题,因为我显然遗漏了一些东西。我不是 OCaml/MirageOS 方面的专家,但考虑到我只是从不同的文件调用相同的函数,这种有争议的类型不匹配行为很难理解。
config.ml
用于生成main.ml
。如果需要,您可以从那里复制生成的代码。
我正在尝试修改可以在 mirage-skeleton 中找到的 MirageOS http-fetch 示例 (https://github.com/mirage/mirage-skeleton),但我在理解为什么我无法移动某些config.ml 文件中执行的函数到我的 unikernel.ml 文件。原始 config.ml 文件如下(我只复制有趣的部分):
[...]
let client =
foreign "Unikernel.Client" @@ console @-> resolver @-> conduit @-> job
let () =
add_to_ocamlfind_libraries ["mirage-http"];
add_to_opam_packages ["mirage-http"];
let sv4 = stack default_console in
let res_dns = resolver_dns sv4 in
let conduit = conduit_direct sv4 in
let job = [ client $ default_console $ res_dns $ conduit ] in
register "http-fetch" job
我想做的是移动这两行:
let res_dns = resolver_dns sv4 in
let conduit = conduit_direct sv4 in
进入我的 unikernel.ml 启动方法。基本上我只想将堆栈传递给我的模块并让它创建一个 dns 解析器和一个管道。我的启动函数如下:
let start c s =
C.log_s c (sprintf "Resolving in 1s using DNS server %s" ns) >>= fun () ->
OS.Time.sleep 1.0 >>= fun () ->
let res_dns = resolver_dns s in
let conduit = conduit_direct s in
http_fetch c res_dns conduit >>= fun (data) ->
Lwt.return(dump_to_db data);
现在我在 http_fetch 参数提交时收到此错误:
Error: This expression has type Mirage.resolver Mirage.impl
but an expression was expected of type Resolver_lwt.t
我在这里问的主要是一个概念性问题,因为我显然遗漏了一些东西。我不是 OCaml/MirageOS 方面的专家,但考虑到我只是从不同的文件调用相同的函数,这种有争议的类型不匹配行为很难理解。
config.ml
用于生成main.ml
。如果需要,您可以从那里复制生成的代码。