什么是钩子

根据我的理解钩子就像是 , 某通勤火车在进站前需要变一次轨 , 但是我们不知道他什么时候进站 , 一直就这样相安无事 , 但是有一天不能被满足的人们认为 : 我们需要在火车即将进站时向站内发送广播通知 . 于是就在变轨那一段铁路上安装了一个钩子 ,钩子链接了站内广播 ,火车经过碰到钩子形成通路 ,然后向站内开始播放广播提示 .

软件中的钩子也是一样 , 例如需要在某个功能执行完毕之后向客户端提示时 , 我们就可以在功能执行完毕时加一个钩子 , 来接受来自软件的通知 .

当然这些是为了便于理解 ,实际上的钩子都是由外部程序以类似窃听的非法手段插入进去的

前置钩子与后置钩子

某个功能执行完毕之后的钩子就是后置钩子 ,执行之前的钩子就是前置钩子

为什么需要钩子

前面已经说过了

Capistrano钩子

同样分为前置钩子与后置钩子

Capistrano 允许在部署应用过程中的特定时刻执行我们指定的命令,很多 PHP 开发者都使用 Capistrano 管理应用的依赖,每次使用 Capistrano 部署应用时,我们可以使用 Capistrano 的钩子安装 Composer 依赖

使用后置钩子

在 config/deploy.rb 文件中添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace :deploy do
desc "Build"
after :updated, :build do
on roles(:web) do
within release_path do
# 自动执行安装Composer依赖
execute :composer, "install"
# 修改当前目录中文件中的所有者 ,使nginx可以访问他们
execute :chown, "-R -f www:www ./"
# 修改当前目录中文件的权限 ,使文件不会被其他用户随意修改
execute :chmod, "-R 755 ./"
end
end
end
end

这样Cap就会在拉取之后进行Composer依赖安装和权限修改了

参考资料

http://laravelacademy.org/post/7530.html
https://www.zhihu.com/question/20610442