第1章 环境配置与工具准备 1
1.1 Shell 1
1.2 管道 7
1.3 几个常用命令 9
1.3.1 文件查找命令find 9
1.3.2 网络命令curl 11
1.3.3 文件搜索grep 13
1.3.4 定时任务crontab 14
1.3.5 JSON查询利器jq 15
1.4 编辑器 18
1.4.1 Vim编辑器 18
1.4.2 Sublime Text编辑器 23
1.5 程序启动器 26
1.5.1 Launchy 27
1.5.2 Alfred 27
1.6 关于Windows 29
第2章 Web应用服务器 30
2.1 Rack 30
2.1.1 rackup 32
2.1.2 Rack中间件 36
2.2 Sinatra 39
2.2.1 404页面 39
2.2.2 使用模板引擎 44
2.2.3 简单认证中间件 46
2.3 Grape 47
第3章 数据库访问层 56
3.1 数据库的访问 56
3.2 数据库方案(schema)的修改 57
3.3 ActiveRecord 59
3.3.1 和Rails一起使用 59
3.3.2 独立使用(在既有数据库中) 65
3.3.3 校验 70
3.4 DataMapper 76
第4章 客户端框架 80
4.1 富客户端 80
4.2 Backbone js简介 83
4.2.1 模型 83
4.2.2 视图 85
4.2.3 集合 91
4.2.4 与服务器交互 94
4.2.5 路由表 95
4.3 Angular.js 98
4.3.1 数据双向绑定 98
4.3.2 内置指令 100
4.3.3 AngularJS中的服务 101
4.3.4 与RESTFul的API集成 105
4.3.5 与moko集成 106
第5章 CSS框架简介 108
5.1 Foundation简介 108
5.2 BootStrap简介 117
5.2.1 布局 118
5.2.2 常用组件 121
第6章 客户端测试框架 130
6.1 Jasmine简介 130
6.1.1 Spy功能 131
6.1.2 自定义匹配器 133
6.2 Mocha 134
6.2.1 Mocha的基本用法 135
6.2.2 测试异步场景 137
第7章 现代的前端开发方式 140
7.1 Karma简介 140
7.2 前端依赖管理 141
7.3 搭建工程 143
7.4 测试驱动开发 146
7.5 实例Todoify 147
7.5.1 underscore的一些特性 148
7.5.2 jQuery插件基础知识 150
7.5.3 Todoify 151
7.5.4 进一步改进 159
第8章 编写更容易维护的JavaScript代码 161
8.1 一个实例 161
8.2 重构:更容易测试的代码 165
8.2.1 搜索框 166
8.2.2 发送请求 167
8.2.3 结果集 168
8.2.4 放在一起 171
8.3 关注点分离:另一种实现方式 174
8.3.1 搜索服务 175
8.3.2 结果视图 175
8.3.3 搜索框视图 176
8.3.4 搜索逻辑 176
8.3.5 放在一起 177
8.3.6 更容易测试的代码 178
第9章 本地构建 180
9.1 Ruby中的构建 180
9.1.1 Rake 180
9.1.2 Guard 185
9.2 JavaScript中的构建 187
9.2.1 Grunt的使用 187
9.2.2 Gulp的使用 192
第10章 持续集成 196
10.1 环境搭建 196
10.1.1 安装操作系统 196
10.1.2 安装Jenkins 199
10.1.3 安装rbenv 200
10.1.4 安装NodeJS 201
10.1.5 安装Xvfb 202
10.2 持续集成服务器 203
10.3 与Github集成 210
10.3.1 Travis 211
10.3.2 Snap 213
第11章 单元测试与集成测试 215
11.1 RSpec单元测试 215
11.2 集成测试工具Selenium 221
11.2.1 Selenium-webdriver 222
11.2.2 Capybara 223
11.2.3 Cucumber 224
11.3 搭建Selenium独立环境 230
11.3.1 安装Selenium 230
11.3.2 服务脚本 230
第12章 环境搭建的自动化 233
12.1 自动化工具Chef 234
12.1.1 使用Berkshelf管理cookbook 234
12.1.2 自动创建用户 236
12.1.3 安装nginx服务器 237
12.1.4 配置nginx 239
第13章 应用程序发布 244
13.1 使用Heroku发布应用程序 244
13.2 发布到虚拟机环境 249
13.2.1 使用密钥登录 249
13.2.2 使用Mina 250
13.3 服务器典型配置 254
第14章 一个实例(前端部分) 259
14.1 线框图 259
14.2 搜索结果页面 261
14.2.1 模板页面 262
14.2.2 导航栏 263
14.2.3 走马灯 264
14.2.4 搜索框 266
14.2.5 目录侧栏 266
14.2.6 植物列表 267
14.2.7 分页器 268
14.3 详细信息页面 270
14.4 加入JavaScript 271
14.4.1 moko 273
14.4.2 AngularJS应用 275
14.4.3 细节页面 279
第15章 一个实例(后台部分) 283
15.1 第一个迭代 284
15.1.1 配置环境 284
15.1.2 定义数据 285
15.1.3 第一次提交 288
15.1.4 添加数据 289
15.2 发布到Heroku 291
15.2.1 环境准备 292
15.2.2 添加数据库插件 292
15.2.3 测试远程应用 293
15.2.4 访问远程数据 294
15.2.5 导出数据 295
15.3 更进一步 296
15.3.1 模块化的Sinatra应用 296
15.3.2 测试 297
第16章 一个实例(集成) 304
16.1 发布 307
16.1.1 添加植物页面 308
16.1.2 一个奇怪的bug 310
16.2 添加图片 313
16.2.1 后台API 314
16.2.2 客户端上传文件 315
16.3 新的问题 321
16.4 文件存储 323
16.4.1 创建分组及用户 323
16.4.2 创建S3中的bucket 325
16.4.3 存储到云端 326
16.4.4 部署到Heroku 328
附录A Web如何工作 330
A.1 CGI的相关背景 330
A.2 配置Apache支持CGI 331
A.3 更进一步 332
A.4 一个稍微有用的脚本 333
A.5 更进一步FastCGI 334
附录B Angular.js的测试 335
B.1 测试Controller 335
B.1.1 AngularJS的一个典型Controller 335
B.1.2 测试依赖于Service的Controller 336
B.1.3 在何处实例化Controller 337
B.1.4 如何mock一个service 338
B.2 测试Service 339
B.2.1 Service的典型示例 339
B.2.2 $httpBackend服务 339
B.2.3 Service的测试模板 341
B.2.4 服务器Moco 342