Capistrano 部署不拉最新提交

99m*_*les 7 capistrano ruby-on-rails

我正在使用 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"
Run Code Online (Sandbox Code Playgroud)

Vas*_*fed 0

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

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