2017-10-12 129 views
0

这是我的Ruby项目的简单部署脚本。Capistrano部署两个Git仓库

set :application, "data" 

set :repo_url, "[email protected]: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

+0

为什么你需要将你的应用程序分成不同的存储库?是一个私人宝石的选择? – spickermann

+0

您的附加回购是一个完全独立的应用程序吗?为什么要将其加载到此应用程序的子目录中?两者都需要同时部署? –

+0

在一天结束的时候,Capistrano建立在Rake之上,因此您可以随时查看它在内部做了些什么,并通过重新定义特定任务来进行修改。 – tadman

回答

0

将我的评论扩展为答案。

另一种方法是将两个存储库独立部署到不同的文件夹,并使用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),并将其替换为符号连接到您的辅助应用程序的current目录(ln -s $OTHER_APP_PATH/current $APP_PATH/shared/lib/myapp)。

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

0

考虑到它可能是一个Capistrano的限制,我看到两种可能的方法副手(有definatly更多)

  • 让分项目gem,包括它方式
  • 使用像Fabric这里面虽然Python代码更是一个迭代的脚本部署工具的
+0

由于太长时间无法解释的原因,宝石不是一种选择。答:linked_dirs会做的伎俩,如果有一种方式,我可以启动在远程端的Git拉。 有没有这样的任务,我可以运行的上限。 – bopritchard

+0

你可能必须通过子模块手动滚动它,像这样的帽子任务,https://gist.github.com/corny/7459729或者可能通过git钩子?道歉,但自从我必须处理脚本部署以来,已经有很长一段时间了,因为现在(所有)都已配置好了。 – engineerDave

+0

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