Ruby 使用 IFTTT 的 DASH 做 Rails App 的开发环境

vmlinz · 2015年10月29日 · 最后由 cloude9101 回复于 2015年11月06日 · 3113 次阅读

DASH 简介

DASH 是由 IFTTT 不久前公布的一个开发环境设置工具,它使用了 docker-compose,docker-machine 和 Ansible 作为基础,安装非常简单,只需要执行它的 bootstrap 脚本就可以喝杯咖啡等它设置完成。

这个工具的主要功能是辅助开发容器化的应用程序,比如之前你使用了 docker-compose 配置过的项目,他能帮你配置本地的 nginx 和 dnsmasq 帮你把自定义域名重定向到你的应用,这样就可以不用在设置 docker-compose 的时候把 nginx 的单独配置放到 docker-compose.yml 里面。

准备

  • Homebrew with XCode Command Line Tools
  • Homebrew Cask
  • Ansible
  • VirtualBox
  • Docker
  • Docker Machine
  • Docker Compose

安装

bash <(curl -fsSL https://raw.githubusercontent.com/IFTTT/dash/master/bin/bootstrap)

使用

在配置了Docker Compose的目录下执行: dev up

工作原理

  • 它会创建一个名叫‘dev’的 docker machine 虚拟机
  • 增加一个 zsh 和其他 shell 的配置文件
  • 将主机的‘.dev’解析指向之前创建的虚拟机
  • 自动启动nginx proxy,这个是个动态反向代理生成器,只需要在 app 的 dockerfile 里面设定 VIRTUAL_HOST 这个环境变量就可以创建 nginx 的 vhost
  • 自动启动dnsmasq,这个是一个本地的 dnsmasq,结合 ansible 脚本里面对 mac 的 dns 的修改,他会把主机的'.dev'域名指向虚拟机 ip

样例

rails-docker-dev,我在这个例子里面设置了一个简单的 rails app 和 postgresql,docker-compose.yml 里面只设定了 app 和 db server,然后我在.env 里面设置了 rails app 的域名为 VIRTUAL_HOST=app.local.dev,这样只要我运行dev up之后就可以直接访问 app.local.dev,他会通过 nginx 反向代理到 rails app 里面。

问题

  • 这个脚本基本没有啥问题,跨越 gfw 之后可以很顺利的安装
  • 有一个已知的问题是如果使用 brew 安装的 zsh,他可能不会正确的安装 zsh 的路径配置,我已经给他提了 pr
  • 这个项目作者维护的不很勤,release 之后还没有再改过,不过我从中还是学到了很多东西,特别是他用到的那个 nginx 的 docker image,很神奇
  • 类似的项目不少,但是这个的依赖好像特别多,也许可以用他的思路去改进其他项目。

已经在开发环境使用了一段时间。还是挺方便的。 https://medium.com/engineering-at-ifttt/developing-with-docker-at-ifttt-5bd03b4e597c#.jo8w7ity5 ifttt 发表的关于 dash 的博文

#1 楼 @cloude9101 是啊,不过用 docker 开发 rails 始终有个问题就是如果 gemfile 改动了他需要重新下载 gems,这个很费时间。还有就是以前的基于 guard 的工作流在 docker 的这种环境下也不是很方便了。这些问题你是怎么解决的呢?

开发环境 vagrant + virtualbox 足够了。

#3 楼 @rei 嗯,我也有用 vagrant 的开发环境,用 docker 是顺便学新东西,现在这个方案还没有好到完全替代 vagrant。有一个明显的好处就是比较节省空间,算是 docker 的特性。

#2 楼 @vmlinz gemfile 可以 参考 上面博文里面 part5,也就是把 gems 单独打包成一个 bundler-cache 镜像,用 volumes_from 从这个镜像引用 gems,实现 gems 的 cache. guard 可以 通过 docker exec -it container_name guard 来运行,live-reload 我没有实践,我看说明应该是需要引入一个 js 文件,也可以实现。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号