Capistrano部署未提取最新提交

时间:2020-08-18 15:04:08

标签: ruby-on-rails capistrano

我正在将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"

2 个答案:

答案 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中使用正确的用户名(也可能是其他目录)