博客后端已从 Ruby/Sinatra 到 Elixir/Phoenix

前言

就在昨天博客叕被重构了,不过呢这次是很久没动过且一直没开源的 Web 后端。当我们访问这个博客的时候,任何请求都要经过后端的路由,即便单页应用具有前端路由功能,但在刷新或直接请求网页时候后端不正确的页面转发会造成问题(例如转发到错误或者不开放的页面)。这是常见的很多不了解单页应用运作模式的人对单页应用认知的误区:)

在之前我的博客后端是一个 Ruby 应用,使用 Sinatra 框架。也许你会疑惑 Ruby 为什么不用 ROR?因为 ROR 早就是过去式了…… 从我那时候接触 Ruby 以来 ROR 这种一站式大而全的重型框架就不流行了,我个人更是厌恶这类技术。当然这不表示 Sinatra 有多好,Sinatra 类似 Python 的 Flask,只是这种精小的框架更适合博客(更何况只是作为单页应用的后端),且定制性更强,发挥空间更多。

而最近使用新的技术:Elixir 语言和 Elixir 上的王牌 Web 框架(实际上是除了它就没有其它拿到出手的)Phoenix 将后端重构了,原有的 Ruby/Sinatra 应用已经彻底停用。

经历和过程

之所以重构的主要原因有二:

  1. Ruby 语言本身不给力。即便它今年还发布了新版本,但仍然改变不了它那么“朴素”的事实。除了语法风格之外几乎毫无优点,至今连 Python 这种相对“锉”很多的同类型脚本语言适用的一点领域市场都争取不到,让我怀疑再继续持有这门技术是否真的有前途以及用武之地。
  2. 对 Elixir 的实践。Elixir 是少有的我在正式接触它之前就十分看好的语言,所以在接触它之后当然迫不及待的进行项目实验了,也就是本博客的后端。

显然这不是我之前重构前端的原因,之前重构前端是因为前端太旧了(两年未更新),新技术新版本都大革新了。而后端的话我原本可以在基于 Ruby/Sinatra 的基础上提交代码的(确实后端技术可以一尘不变很久很久),但是由于我对 Ruby 的失望和对新语言的兴趣,让我进行了这次行动。

结果是令人满意的,例如在过程中我彻底弄明白了 Elxir 中管道的优势和基于管道哲学设计 API、利用 OTP/Agent 储存状态、对 Phoenix 和 Plug 的参考和研究等。确实由于对函数式编程实践的缺乏,导致我延长了这次重构时间。因为后端很简单,原本计划只需要一个上午,完成时间却在三天后。因为不断的有障碍阻挡令我需要花单独的时间深入,当然这是值得的:)

结束语

至此我的博客已经彻底的开源,API 服务、前端、Web 后端 这三个组成部分都经过两次的重构工作。重新组织这些组件需要时间,现在没有这个精力,新的博客核心服务也还在缓慢开发中……

仓库地址:https://github.com/Hentioe/blog.ex