备注:

distillery  使用很棒的elixir 打包构建工具,下面演示的是升级以及降级
 
1. 参考项目
https://github.com/rongfengliang/phoenix-rest-demo.git

备注: 此项目已经以及配置distillery了,可以参考文档
 
 
   2. 升级&& 降级代码构建
实际上主要是进行mix.exs  版本修改以及mix  release --upgrade  参数使用

a.  0.0.1 版本

mix.exs

def project do
[
app: :hello,
version: "0.0.1",
elixir: "~> 1.4",
elixirc_paths: elixirc_paths(Mix.env),
compilers: [:phoenix, :gettext] ++ Mix.compilers,
start_permanent: Mix.env == :prod,
aliases: aliases(),
deps: deps()
]
end /web/templates/page/index.html.eex 修改部分代码: <div class="row marketing">
<div class="col-lg-6">
<h4>dalongdmeo v 0.0.1</h4>
<ul>
构建: MIX_ENV=prod mix release b. 0.0.2 升级版本修改 mix.exs def project do
[
app: :hello,
version: "0.0.2",
elixir: "~> 1.4",
elixirc_paths: elixirc_paths(Mix.env),
compilers: [:phoenix, :gettext] ++ Mix.compilers,
start_permanent: Mix.env == :prod,
aliases: aliases(),
deps: deps()
]
end /web/templates/page/index.html.eex 修改部分代码: <div class="row marketing">
<div class="col-lg-6">
<h4>dalongdmeo v 0.0.2</h4>
<ul>
构建: MIX_ENV=prod mix release --upgrade c. 构建结果
参考下图:
 
 
3. 使用
a. 启动一个版本(0.0.2)

因为有两个构建,默认启动是最新的版本

_build/prod/rel/hello/bin/hello foreground

结果如下图:
 
 
 
b. 演示降级

_build/prod/rel/hello/bin/hello downgrade 0.0.1

Release 0.0.1 not found, attempting to unpack releases/0.0.1/hello.tar.gz
Unpacked successfully: "0.0.1"
Release 0.0.1 is already unpacked, now installing.
Installed Release: 0.0.1
Made release permanent: "0.0.1" 结果如下图:
 
 
 
4. 总结
功能比较棒,能够实现代码的热切换,对于业务不能停顿的系统特别有用
 
 
5. 参考资料
https://github.com/rongfengliang/phoenix-rest-demo
https://hexdocs.pm/distillery/walkthrough.html#content
 
 
 
 
 

使用distillery 实现版本的动态升级&& 动态降级的更多相关文章

  1. Android 插件化 动态升级

    最新内容请见原文:Android 插件化 动态升级 不少朋友私信以及 Android开源交流几个 QQ 群 中都问到这个问题,这里简单介绍下 1.作用 大多数朋友开始接触这个问题是因为 App 爆棚了 ...

  2. ffmpeg 2.8.1 最新版本 VS2013 可调式动态库

    ffmpeg 2.8.1 最新版本 VS2013 可调式动态库 由于大多数初学者都在想尽各种版本寻求VC编译调试ffmpeg的版本,我也曾经移植过几个版本的ffmpeg到VC上编译.: 链接所需动态库 ...

  3. 结合rpyc使用python实现动态升级的方法

    动态升级,就是程序不退出的情况下,将其代码更新的策略.假设集群含有多个机器,然后每个机器部署一套程序,当升级的时候就要去所有的上面部署一把. (1)有个包装程序专门负责接口并检查是否需要更新,当需要更 ...

  4. 【大话QT之十二】基于CTK Plugin Framework的插件版本号动态升级

    应用需求: 某些场景下我们可能面临这种问题,在执行着的应用程序不能终止的情况下,升级某个功能(或添,或减.或改动).在不採用CTK Plugin Framework插件系统架构的情况下这将是非常困难的 ...

  5. Quartz.NET 3.0.7 + MySql 实现动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)

    原文:Quartz.NET 3.0.7 + MySql 实现动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一) 前端时间,接到领导任务,写了一个调度框架.今天决定把心路历程记 ...

  6. mybatis操作动态表+动态字段+存储过程

    存储过程 statementType="CALLABLE" <!-- 计算金额存储过程--> <update id="getCalcDistributo ...

  7. 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误

    出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误:org.hibernate.MappingException: No Di ...

  8. 关于DB2版本、补丁升级和回退的总结[转载]

    首先介绍几个概念 RELEASE的升级就是版本升级,例如9.1→9.5→9.7→10.1,可以跳版本升级,例如9.1→10.1 FIX PACK简称FP,就是打补丁,例如9.7.1→9.7.2,每个版 ...

  9. C# 反射,动态类,动态方法

    1.动态类名,固定方法名,例如.调用不同类下边的GetById()方法: //项目需要引用Miscorsoft.CSharp类库,否则会报错:找不到编译动态表达式所需的一个或者多个类型.//引用这两个 ...

随机推荐

  1. CSS布局框架 960GS 表单排版示例

  2. C++:创建线程初试

    1.使用CreatThread创建 #include <iostream> #include <Windows.h> using namespace std; /* 创建一个线 ...

  3. 006-对象—— static关键字 静态属性和方法的使用

    <?php /*static()静态属性: */ //静态属性: /*class Model{ private $mysqli; static $config;//数据库连接状态 functio ...

  4. linux中的/usr,/var,/opt目录详解

    转自:http://it.greenblogs.org/archives/2008/20113.shtml/ /usr文件系统  /usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所 ...

  5. MySQL pt-table-checksum及pt-table-sync校验及修复主从一致性

    [pt-table-checksum]pt-table-checksum是percona-toolkit系列工具中的一个, 可以用来检测主. 从数据库中数据的一致性.其原理是在主库上运行, 对同步的表 ...

  6. String类运算符重载,自己实现

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  7. js 滚到页面顶部

    一.滚到顶部,且滚动中,用户滚动鼠标无效 <style> .div1, .div2, .div3, .div4 { height: 400px; width: 400px; } .div1 ...

  8. UI-基本控件的简单使用

    1.IBAction:   //====================== 1> 能保证方法可以连线 2> 相当于void 2.IBOutlet: 1> 能保证属性可以连线 3.常 ...

  9. AS3帮助手册

    http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/index.html

  10. vue.js 源代码学习笔记 ----- 工具方法 lang

    /* @flow */ // Object.freeze 使得这个对象不能增加属性, 修改属性, 这样就保证了这个对象在任何时候都是空的 export const emptyObject = Obje ...