【发布时间】: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 是否显示任何错误可能很有用。谢谢。