【发布时间】:2014-12-18 12:37:35
【问题描述】:
我正在使用 Capistrano 部署到运行 Nginx 的服务器。我在使用 APC 时遇到了一些问题,我需要在 Capistrano 完成部署后重新加载 PHP-FPM。问题itself is outlined here 但就像那个作者一样,我不想通过 SSH 远程从命令行重新加载 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" -
将这两个任务包装在“部署”命名空间中并使用以下命令触发挂钩
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 -
使用“运行”而不是执行
task :fpmreload do on "user@123.45.67.89" do run "service php-fpm reload" end end
Hrrmph,以及大约一百万种变化。我现在真的只是在猜测,即使有详细的错误报告,错误消息也无济于事。只有一个 deploy.rb 文件的工作示例,其中包含一个运行命令的简单部署后挂钩,但我找不到。
【问题讨论】:
标签: deployment capistrano capistrano3