Skip to content

dev_guide

fsword edited this page Mar 1, 2017 · 4 revisions

Shelter 开发指南

技能要求

  • Ruby on Rails: Shelter基于RoR,数据库使用 postgresql
  • Docker/Compose: Shelter系统中的各服务交付为 Docker 镜像,并使用 Docker Compose 进行组织
  • 12 factors: 尽可能遵循 Cloud native 的实践,推崇将研发、测试、运维三种过程进行统一的方法论
  • Git/Github: 源码管理基于Git

环境准备

实际上,由于 Shelter 的开发可以完全在容器中进行,所以开发环境不需要特别设定,只要本机的 docker compose 正常工作即可。

如果要启动 shelter 系统,那么你还要确保 docker 宿主机的80端口没有被占用,否则查看这里——更改proxy的缺省端口-TODO

研发步骤

说明: 本节所有涉及 docker-compose 的命令都在docker-compose 相关命令中有详细解释

基本步骤

  • 将项目源码clone到本地(假定是 /home/tom/shelter 目录)
$ cd /home/tom
$ git clone [email protected]:larrow/shelter.git
$ cd shelter
  • 修改代码:根据实际需要执行修改
  • 构建镜像
$ docker-compose build
  • 运行系统
$ docker-compose up -d
  • 手工验证:访问 http://<your_docker_host_ip> ,详细说明参见这里
  • 如果有错误,重复上述步骤 :-P
  • 验证完毕后,提交代码并推送至 github
  • github自动触发 travis CI ,如果执行无误可以提交 PR
  • 维护者验证后执行合并

代码热更新

基于 docker ,开发可以很容易的建立分布式系统,但是由于代码必须进入容器才能生效,如果按照build-rerun-test这个过程,会比较浪费时间。

为了便于开发,我们添加了一个docker-compose-development.yml文件,在开发阶段,程序员可以使用这个文件来驱动 docker compose ,它启动的 Rails 应用是可以支持代码热更新的。

如何启用

-development文件是配合 docker-compose 使用的,只要在 docker-compose 命令后附加一个 -f 参数即可,例如:

$ docker-compose -f docker-compose-development.yml up -d

系统将会按照开发模式的描述规格启动,其余 docker-compose 命令以此类推。

为了方便起见,建议你使用一个alias,缺省附加 -development 文件,用户可以在自己的 .bashrc 文件中添加这句话——

alias fig='docker-compose -f docker-compose-development.yml'

用这种方式启动shelter以后,开发者就可以一遍修改代码,一遍看运行效果了

两个docker-compose文件有什么不同 和标准docker-compose.yml相比,这个-development文件主要有以下变化:

  • 添加 volume 映射,使用当前目录的新代码(而不是镜像中的代码)启动Rails应用。
  • 设定环境变量 RAILS_ENV 的值为 development (否则缺省为 production),激活 Rails 的开发模式
  • 开启 tty 和 stdin ,便于通过 docker attach 进入 pry 的断点
Clone this wiki locally