使用Rails 3.0.7和git,用capistrano进行部署。 我使用不同的机器作为Web和应用程序服务器。 我无法将应用程序代码部署到Web服务器,只有静态资产 – 基本上是公共/文件夹。
这似乎很普遍,但没有运气寻找最佳做法。
围绕capistrano处理这个案件有什么build立吗? 否则,我想添加任务来创build结构,但从应用程序服务器scp
公共目录将是解决scheme。
所以我认为有一个商业原因,你不能将应用程序部署到其他服务器?
如果没有那么只是部署整个代码,并配置您的Web服务器只是公用文件夹。
(在Apache /乘客的配置将完全相同,你只是不会在静态服务器上启用乘客)
这是唯一的简单的方法来做到这一点,否则你会让自己头痛。
不过,我要弥补一个办法来解决这个问题。
如果您确实需要部署静态代码,那么我建议您创建两个存储库
现在在你的应用程序中包括git @ myserver:static.git作为子模块安装在公共/
完成这个之后,你应该搜索标准的capistrano食谱来部署git子模块(特别是我想你会想要存储子模块的本地缓存,更新它,然后以某种方式git submodule init
)
你可以有两个capistrano食谱
我建议你看看capistrano多阶段…定义应用程序和静态为两个阶段
因此,您可以指定git @ myserver:app.git作为“app”的存储库,并将git @ myserver:static.git指定为“static”
那么一个简单的cap app deploy:migrations && cap static deploy
应该这样做。
但记住这些不会是同时发生的
我也希望有更多的公开的做法。 我们已经完成了基于Django书籍建议使您的公共应用程序目录一个网络目录。
这是好得多,因为只有你的公共目录是静态的,scp才能工作。 很多应用程序会将内容写入公共目录,例如即时生成图像。 这些文件也需要立即复制到Web服务器。
我推荐使用NFS,Samba Share或者类似的方法,这样你的公共目录实际上就是一个网络文件夹,所以当你写入它的时候,就像写入远程文件夹一样。
要将它整合到capistrano中,我们执行以下操作:在shared / public中创建此网络文件夹
部署后:update_code:将内容从current / public移动到shared / public(根据需要覆盖文件)删除或重命名current / public,然后将符号链接current / public改为shared / public
缺点:*不会删除旧文件(就像之前所说的那样)*没有真正的回滚选项(除了重新部署旧版本)
我想到的最好的方法是将scp文件传输到Web服务器。