Capistrano 部署有两个 Git 个存储库

Capistrano deploy with two Git repositories

这是我的 Ruby 项目的简单部署脚本。

set :application, "data"

set :repo_url, "git@github-data:MyCompany/api_data.git"

set :deploy_to, '/var/www/data'

append :linked_files, "config/secrets.yml"
append :linked_dirs, "log"

namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
end

这很好用,但我需要添加一个额外的存储库并将其部署到主项目的子目录中。到目前为止,我已经尝试了一些没有成功的事情。感谢您的帮助

第 3.8.2 章

鉴于这可能是 capistrano 的限制,我看到了两种可能的方法(肯定有更多)

  • 将子项目设为 gem 并以这种方式包含它
  • 使用类似 Fabric 的东西,而 python 代码更像是一个迭代脚本部署工具

将我的评论扩展为答案。

另一种选择是将两个存储库独立部署到不同的文件夹,并使用 linked_dirs 和符号链接将两者连接起来。我一直用这个方法。

假设您的应用程序的发布路径是 $APP_PATH,您的辅助存储库的发布路径是 $OTHER_APP_PATH。让我们也假设这个例子,你需要二级回购出现在你的应用程序中的 lib/myapp

我首先将您的辅助应用程序部署到您服务器上的 $OTHER_APP_PATH

然后将 append :linked_dirs, 'lib/myapp' 添加到您应用的 deploy.rb 配置中。部署时,您应该在 $APP_PATH/shared/lib/myapp 处有一个空文件夹,它与 $APP_PATH/current/lib/myapp 有符号链接。删除该文件夹 (rmdir $APP_PATH/shared/lib/myapp) 并将其替换为指向辅助应用 (ln -s $OTHER_APP_PATH/current $APP_PATH/shared/lib/myapp) 的 current 目录的符号链接。

现在,您的辅助应用程序的内容应该会显示在您的主要应用程序的 lib/myapp 文件夹中。