每周收集和 Elixir 相关的文章和讯息. 有任何对文章的补充和错误之处欢迎邮件指出: zengzhilgATgmail.com

Reorganizing Your Contexts as Use Cases

Luiz 展示了如何将领域( context )中的行为拆分为”用例”. 以销售 (Sales) 这个领域为例, 通常会包含 客户( Client )和订单( Order )两个部分的数据. 使用 Phoenix 自带的 Context 生成器会在 Sales 中产生两组 create_*/1, update_*/2 and delete_*/1 这样的函数. 随着涉及的模块越来越多这个 Sales 中逻辑会越来越多. 而以用户的行为来思考的话, 可以将逻辑进一步的细分, 比如取消订单的用户行为可以拆分为 AlchemyReaction.Sales.CancelOrderManually. 这个 Use case 模块中设计了一个有趣的方法 call/2, 它始终会返回 Ecto.Multi , 通过这样的方式, 各种不同的 Use Cases 可以组合在一起完成更为复杂的业务逻辑.

Continuous Deployment of a Phoenix Project Using GitLab CI/CD

Antoine 在这篇文章描述了如何在 Gitlab 中为 Phoenix 项目做持续集成和搭建自动化部署流程.

4 tips for mastering test-driven development

文章分享了几个和 测试驱动开发( TDD )相关的几个小贴士, 包括
1. 测试第三方api
2. 测试数据库回滚
3. 使用代码覆盖率去衡量代码, 使用 excoveralls 这个 hex 生成报告
4. 使用 property-based testing 每一个贴士都有详尽说明, 值得一看.

Updating Hex.pm to use Elixir v1.9 Releases

Elixir v1.9.0-rc.0 版本已经释出了. 我们之前预告过 1.9.0 会自带官方 release 功能. 这篇文章就是关于如何使用新的 mix release 去完成部署. Distillery 估计会在将来完成它的历史使命.

Elixir: Containerized Development Environment

Dmitri 的这篇文章并不同于以往的 docker 化文章, 相比其他 elixir 项目docker化, 作者关注于将 elixir 的开发环境容器化. 并且给出了如何使用 VSCode Remote 去结合容器的方案

Add a Progress Bar in the Phoenix File Upload app

这篇是之前文件上传系列的第三篇. 前两篇的内容在往期的周报都有所涉及. 该篇主要讲述如何支持显示文件上传进度,所以内容偏重于 JS 这边的前端处理. 对于上传进度原生 JS实现有兴趣的同学不妨一看, 说不定可以实现一个自己的 Dropzone.js 呢. 往期文章:

  1. Step-by-Step Tutorial to Build a Phoenix App that Supports User Upload
  2. Creating Thumbnails of uploaded Images and PDF in Phoenix

Elixir Circuits Quickstart Firmware

这是一个叫做 “Elixir 电路一键安装固件” 的 github repo 项目, 使用这个固件可以让你在 树莓派 和 BeagleBone 硬件设备上极速集成 Nerves 所需的 Elixir 环境. 支持的设备包含: Raspberry Pi Zero, Zero W, 3 Model A+ 和 任意 BeagleBone 兼容的设备. * 该项目的Readme 包含一个从固件安装到硬件线路,针脚配置的完整细节. 硬件黑客不妨一看.

Protocol Buffers To Pass Data Between Elixir/Phoenix And Python

Meraj 需要在 python 的机器学习系统和 Phoenix 的服务之间传递信息. 为了达成目的他使用 “Protocal Bufffers” 来做数据的序列化与反序列化. 我记得 Elixir 的深圳微信群也提到过用 Protocal Bufffers. 有更多的细节还望告知.