我正在将Capistrano的Rails应用程序部署到Ubuntu服务器(EC2)。
当我使用--trace进行部署时,一切似乎都正常。
当我查看服务器上的修订日志时,它显示在最新的部署中使用了最新的提交哈希,但是,当我进入该最新的发行目录时(是的,我确认已创建一个新的发行目录,并且我所在的那一个)中没有最新的提交。
如果我从服务器上的新发行目录执行“ git pull origin master”,那么它当然会提取最新的提交。
有人知道为什么在Capistrano部署中不会发生git pull吗?
编辑: 这是deploy.rb文件:
lock "~> 3.14.0"
set :pty, true
set :application, "123abc"
set :repo_url, "git@github.com:123/abc.git "
# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
set :branch, "master"
set :rbenv_ruby, File.read('.ruby-version').strip
append :linked_files, "config/secrets.yml"
append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets"
namespace :deploy do
before :compile_assets, :force_cleanup_assets do
on release_roles(fetch(:assets_roles)) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, 'assets:clobber'
end
end
end
end
app_service_name = "#{fetch(:application)}-#{fetch(:stage)}"
services = ["#{app_service_name}-workers"]
desc "Restart application"
task :restart do
on roles(:app), in: :sequence, wait: 5 do
execute :sudo, :systemctl, :stop, app_service_name
sleep 1
execute :sudo, :systemctl, :start, app_service_name
# execute :sudo, :systemctl, :restart, app_service_name
end
end
desc "Restart Workers"
task :restart_services do
on roles(:app), in: :sequence, wait: 5 do
services.each { |service| execute "sudo systemctl restart #{service}" }
end
end
desc "Start Workers"
task :start_services do
on roles(:app), in: :sequence, wait: 5 do
services.each { |service| execute "sudo systemctl start #{service}" }
end
end
desc "Stop Workers"
task :stop_services do
on roles(:app), in: :sequence, wait: 5 do
services.each { |service| execute "sudo systemctl stop #{service}" }
end
end
end
after "deploy:publishing", "deploy:restart"
after "deploy:publishing", "deploy:restart_services"
答案 0 :(得分:1)
您的组织是否正在使用带有ca证书的代理? 您是使用SSL从github站点中提取还是从具有自签名证书的其他git克隆中提取? 请尝试向用于部署的用户使用su,然后尝试git pull,以查看其是否有效? 您是否正在使用令牌进行身份验证,凭证或证书? 如果有效地尝试连接到github,我将尝试tcpdump看看发生了什么。 您的部署可以使用完全克隆或拉取?您可以使用完整克隆进行部署吗? 您使用的是SSH还是HTTPS,以及默认端口还是特殊端口?。
您可以发布跟踪,还是至少检查一下是否没有类似内容:
Connection refused - connect(2)
我想您repourl之后的结尾空格不在最终文件中。
欢呼
答案 1 :(得分:0)
这可能是由于<deploy_path>/repo
内部的所有权/权限所致,例如,如果您曾经在其他用户下运行过deploy或git pull服务器。
请确保您在deploy/<env>.rb
配置和chown -r that_user:that_user <deploy_path>/repo
中使用正确的用户名(也可能是其他目录)