【问题标题】:Capistrano deploys not pulling latest commitsCapistrano 部署不提取最新提交
【发布时间】:2020-08-18 15:04:08
【问题描述】:

我正在使用 Capistrano 将 Rails 应用程序部署到 Ubuntu 服务器 (EC2)。

当我使用 --trace 进行部署时,一切似乎都很顺利。

当我查看服务器上的修订日志时,它显示在最近的部署中使用了最新的提交哈希,但是,当我进入最新的发布目录时(是的,我确认创建了一个新的发布目录并且我在那个)它没有最近的提交。

如果我从服务器上的新发布目录执行“git pull origin master”,它当然会提取最新的提交。

知道为什么 git pull 不会在 Capistrano 部署中发生吗?

编辑: 这是 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"

【问题讨论】:

  • 嗨@99miles,有时在通过非交互式会话记录时未设置环境路径(例如使用 capistrano/sshd gem 记录)。您可以检查是否设置了所有环境变量吗?不过只是一个指针。
  • @DonRaHulk 你指的是什么环境变量?
  • 操作系统环境变量
  • 你能把deploy.rb文件上传到这里吗?
  • 你能不能像这样在deploy.rb中设置一个使用- set:user, 'deploy' 并确保你以同一用户身份登录,以便检查用户的权限拉取最新的代码。此外,查看 capistrano 是否显示任何错误可能很有用。谢谢。

标签: ruby-on-rails capistrano


【解决方案1】:

您的组织是否使用带有 ca 证书的代理? 您是使用 SSL 从 github 站点拉取还是从另一个带有自签名证书的 git clone 拉取? 请尝试 su 到用于部署的用户,并尝试 git pull,看看它是否有效? 您是否使用令牌进行身份验证或凭据或证书? 我会尝试 tcpdump 看看发生了什么,如果它有效地尝试连接到 github。 您的部署适用于完整克隆或拉取?您可以使用完整克隆进行部署吗? 您使用的是 SSH 还是 HTTPS,以及默认端口还是特殊端口?

您能否发布跟踪信息,或者至少检查一下您没有类似以下内容:

Connection refused - connect(2)

我猜你 repourl 后的结尾空格不在你的最终文件中。

干杯

【讨论】:

    【解决方案2】:

    这可能是因为 <deploy_path>/repo 内部的所有权/权限,例如,如果您在其他用户下的服务器上运行了 deploy 或 git pull。

    确保您在 deploy/<env>.rb 配置和 chown -r that_user:that_user <deploy_path>/repo 中拥有正确的用户名(也可能是其他目录)

    【讨论】:

    • 谢谢,我确认同一用户拥有“repo”目录。我还按照建议尝试了“chown”,并删除了整个“repo”目录。没运气。我还删除了 'current'、'releases' 和 'repo' 目录,重新部署。一切顺利,除了它没有提取最新的提交
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多