关于elixir:使用-Phoenix-LiveBook-做一个小实验-实时编码部署http服务

6次阅读

共计 1188 个字符,预计需要花费 3 分钟才能阅读完成。

LiveBook 是 elixir 团队新推出的一款利用,能够应用它很不便地在浏览器中编写文章,并且在其中运行 elixir 代码。

我很好奇是否应用 LiveBook 间接更改以后服务器的路由配置,使得咱们能够实现实时部署服务。比方咱们在 LiveBook 里写好一个页面,而后间接配置到某个 url 门路上,他人就能够拜访到。这样感觉十分酷,省去了繁琐的配置打包和公布的流程,而且从实践上是齐全能够实现的。

说干就干,首先我在 fly.io 上部署了一个收费的 livebook 实例,你也能够在本地部署,很不便的。

启动之后在左侧的配置按钮里抉择 Runtime settings,选则 Embedded。即在 livebook 自身的 erlang node 里执行代码。livebook 为了保障安全性和隔离性,默认是会另启动一个 node 来执行代码的,也就是 Elixir standalone 选项,但这样咱们是无奈批改路由配置的。

批改好之后,我新建了一个文档,就能够开始写代码了。Livebook 应用的是 Phoenix 框架,其底层的 HTTP 服务器是 Cowboy,再底层是 ranch。所以咱们先通过 :ranch.info() 来获取以后服务器的一些信息。从返回值里咱们晓得了以后的 ranch server 的 ref 是 LivebookWeb.Endpoint.HTTP,所有的路由(或者叫散发 Dispatch)配置都是在这外面保留。下一步咱们就能够对 dispatch 配置进行批改。

每个 http 申请都会被散发到不同的 handler(这个怎么翻译来着,抓手?),所以咱们首先须要写一个用于测试的 handler。

defmodule TestHandler do
  @behaviour :cowboy_handler

  def init(req, state) do
    req = :cowboy_req.reply(200, %{"content-type" => "text/plain"}, "Hello World!", req)
    {:ok, req, state}
  end
end

它的性能非常简单,无论收到什么都返回你好世界。接下来将它配置到咱们的 dispatch 外面,留神要保留之前的 dispatch 内容,否则咱们的 livebook 就拜访不了了哈哈。

dispatch = :cowboy_router.compile([{:_, [], [{'/test', [], TestHandler, %{}},
  {:_, [], Phoenix.Endpoint.Cowboy2Handler, {LivebookWeb.Endpoint, []}}
]}])

最初应用 cowboy 提供的实时更新性能,将新的配置部署到咱们的 ranch server 外面:

:cowboy.set_env(LivebookWeb.Endpoint.HTTP, :dispatch, dispatch)

试着拜访一下咱们配置的门路。胜利了!

正文完
 0