概述

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

最新文章

  1. 夺命雷公狗-----React---22--小案例之react经典案例todos(完成数据的遍历)
  2. matlab 聚类
  3. 《深入.NET平台和C# 编程》内测纠错记录
  4. ASP.NET MVC3 Areas 分离项目 同名控制器(同名Controller) 演示demo
  5. 导航栏视图设置 tabbleView 是设置总背景图
  6. zookeeper实现商品秒杀抢购
  7. 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
  8. Expected authority at index 7: hdfs://
  9. pc app 桌面打包
  10. 在Ueditor / Umeditor中实现上传图片跨域
  11. 【maven插件】maven-shade-plugin
  12. 【Unity与23种设计模式】装饰模式(Decorator)
  13. Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级
  14. python leetcode 字符串相乘
  15. 实时采集新加坡交易所A50指数
  16. form表单利用iframe高仿ajax
  17. MATLAB——sigmoid传递函数
  18. operator 重载内置运算符
  19. Maven配置本地库加载ojdbc14-10.2.0.4.0.jar文件
  20. marquee标签详解

热门文章

  1. C++ crash 堆栈信息获取
  2. JDK1.8源码(一)——java.util.ArrayList
  3. Chapter 4 Invitations——25
  4. C语言实现二叉树中统计叶子结点的个数&度为1&度为2的结点个数
  5. leetcode — longest-consecutive-sequence
  6. SpringBoot基础系列-使用日志
  7. DHTMLX 常用技术
  8. Perl List::Util模块用法详解
  9. Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
  10. DNS服务器 和CDN