• phoenix API服务发布


    概述

    Elixir 的 Phoenix 框架对于开发 Web 应用非常方便,不仅有 RoR 的便利,还有 Erlang 的性能和高并发优势。 但是应用的发布涉及到 Erlang 和 Elixir 环境,部署不是那么方便,特别是很多 package 需要访问国外的服务器。

    因此,如果能像 golang 那样,把整个应用打包成一个可执行的二进制,部署时会方便很多。 打包后不仅包含应用引用的 packages,也包含 erlang 的运行环境。

    使用 distillery 就可以完成需求。 这里打包的是 API 服务,也就是不包含前端的部分。

    distillery 打包

    distillery 提供丰富了 API,除了打包,还有升级/降级,代码热替换等功能,这里我们只介绍打包的功能。

    创建示例工程

    $ mix phx.new hello --no-brunch --no-ecto 
    

    只是实验 phoenix 工程的打包功能,所以这里不安装前端的依赖,也不安装数据库相关依赖。

    创建一个简单的 api lib/hello_web/router.ex

    scope "/api", HelloWeb do
      pipe_through(:api)
    
      get("/", PageController, :api)
    end
    

    lib/hello_web/controllers/page_controller.ex

    def api(conn, _params) do
      json(conn, %{result: "success"})
    end
    

    安装 distillery

    mix.exs 中的 deps 中添加:

    defp deps do
      [
        ...
        {:distillery, "~> 1.5", runtime: false}
      ]
    end
    

    然后在 hello 工程目录下执行:

    mix deps.get 
    

    执行成功的话,在命令行界面上可以看到安装了 distillery 依赖。

    配置 distillery 相关

    首先,生成配置文件

    mix release.init
    

    这个命令生成的 rel/config.exs 没有什么要修改的。

    修改 config/prod.exs

    config :hello, HelloWeb.Endpoint,
      server: true,
      http: [port: 4001],
      url: [host: "localhost", port: 4001]
    

    这里写死了 port,也可以改成从环境变量中读取。

    发布工程

    MIX_ENV=prod mix release
    

    编译成功后,在 _build/prod/rel/hello/releases/ 文件夹下生成一个 hello.tar.gz 包,这个包就可以直接部署在其他机器上。 如果默认配置,version 就是 0.0.1

    部署运行

    将生成的 hello.tar.gz 放到其他机器也可以直接运行,不用安装 erlang 和 elixir 环境。

    cd /home
    mkdir hello
    tar zxvf hello.tar.gz -C hello
    cd hello
    ./bin/hello foreground
    

    总结

    distillery 的功能远不止此,更多的功能可以参考:https://hexdocs.pm/distillery/getting-started.html

  • 相关阅读:
    阶梯博弈
    hihoCoder #1199 : Tower Defense Game ——(树型dp)
    2016 China-Final-F题 ——(SA+二分)
    ACM之路(20)—— Splay初探
    2016 ICPC China-Final 现场赛总结
    【Interleaving String】cpp
    【Best Time to Buy and Sell Stock III 】cpp
    【Maximal Rectangle】cpp
    【palindrome partitioning II】cpp
    【Maximum Subarray 】cpp
  • 原文地址:https://www.cnblogs.com/wang_yb/p/9177941.html
Copyright © 2020-2023  润新知