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
最新文章
- 夺命雷公狗-----React---22--小案例之react经典案例todos(完成数据的遍历)
- matlab 聚类
- 《深入.NET平台和C# 编程》内测纠错记录
- ASP.NET MVC3 Areas 分离项目 同名控制器(同名Controller) 演示demo
- 导航栏视图设置 tabbleView 是设置总背景图
- zookeeper实现商品秒杀抢购
- 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
- Expected authority at index 7: hdfs://
- pc app 桌面打包
- 在Ueditor / Umeditor中实现上传图片跨域
- 【maven插件】maven-shade-plugin
- 【Unity与23种设计模式】装饰模式(Decorator)
- Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级
- python leetcode 字符串相乘
- 实时采集新加坡交易所A50指数
- form表单利用iframe高仿ajax
- MATLAB——sigmoid传递函数
- operator 重载内置运算符
- Maven配置本地库加载ojdbc14-10.2.0.4.0.jar文件
- marquee标签详解
热门文章
- C++ crash 堆栈信息获取
- JDK1.8源码(一)——java.util.ArrayList
- Chapter 4 Invitations——25
- C语言实现二叉树中统计叶子结点的个数&;度为1&;度为2的结点个数
- leetcode — longest-consecutive-sequence
- SpringBoot基础系列-使用日志
- DHTMLX 常用技术
- Perl List::Util模块用法详解
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
- DNS服务器 和CDN