我正在使用Capistrano部署到运行Nginx的服务器。我遇到了APC的一些问题,我需要在Capistrano完成部署后重新加载PHP-FPM。问题itself is outlined here但是和那个作者一样,我不想在命令行中远程登录并重新加载PHP-FPM,我希望Capistrano能够将其作为一个部署后的钩子。
正在使用的deploy.rb的本质如下;
set :application, "deploytest"
set :repository, "git@bitbucket.org:gitaccount/git-repo.git"
set :scm, :git
set :deploy_via, :remote_cache
set :app_webroot, "/public"
default_run_options[:pty] = true
desc "Execute Capistrano tasks against Production server."
task :prod do
role :web, "123.45.67.89"
role :app, "123.45.67.89"
set :env, "prod"
set :domain, "deploy-domain.com"
set :deploy_to, "/var/www/vhosts/#{domain}/site"
set :branch, "master"
end
我可以使用命令推送;
bundle exec cap prod deploy
效果很好。男孩让我努力让命令在部署完成后自动触发另一个命令。
我尝试了什么;
以下是主要方法的摘要;
为我的任务创建新的命名空间
namespace :mcnab do
desc "Running hook post deploy"
task :fpmreload do
execute "service php-fpm reload"
end
end
after "deploy:create_symlink", "mcnab:fpmreload"
将这两个任务包装在“deploy”命名空间中并使用以下命令触发挂钩
after "deploy:create_symlink", "deploy:fpmreload"
在新任务中再次明确设置角色
task :fpmreload do
role :web, "178.62.13.10"
role :app, "178.62.13.10"
on roles(:all) do
execute "service php-fpm reload"
end
end
明确设置用户
task :fpmreload do
on "user@123.45.67.89" do
execute "service php-fpm reload"
end
end
使用'run'代替执行
task :fpmreload do
on "user@123.45.67.89" do
run "service php-fpm reload"
end
end
Hrrmph,其上有大约一百万个变种。我现在真的只是猜测,即使有详细的错误报告,错误消息也没有多大帮助。只有一个带有一个简单的post deploy hook运行命令的deploy.rb文件的工作示例会很棒,但我找不到。
答案 0 :(得分:5)
这对我有用
before :published, :fpm_reload
desc 'Fpm reload'
task :fpm_reload do
on release_roles :all do |host|
execute :service, 'php5-fpm', :reload
end
end
文档: http://capistranorb.com/documentation/getting-started/flow/