使用Rails 3.0.7和git,使用capistrano进行部署。我使用不同的机器作为网络和应用程序服务器。我无法将应用程序代码部署到Web服务器,只能部署静态资产 - 基本上是public /文件夹。
这似乎很常见,但没有运气寻找最佳做法。
是否有任何东西围绕capistrano来处理这种情况?否则,我在考虑添加任务来创建结构,但scp
来自应用服务器的公共目录将是解决方案。
答案 0 :(得分:1)
所以我假设有一个商业原因你无法将应用程序部署到其他服务器上?
如果没有,那么只需部署整个代码 并将您的Web服务器配置为仅提供公用文件夹。
(在Apache / Passenger中,配置将完全相同,你只是不会在静态服务器上启用乘客)
这是唯一的简单方法.. 否则你会让自己感到头痛......
然而,我会想办法解决这个问题。
如果确实需要部署静态代码 然后我建议你创建两个存储库
现在在您的应用中包含git @ myserver:static.git作为在public上安装的子模块/
完成此操作后,您应该搜索标准的capistrano配方,以便使用git子模块进行部署(特别是我想你会想要存储子模块的本地缓存,更新它,然后用git submodule init
以某种方式)< / p>
然后你可以有两个capistrano食谱
我建议你查看capistrano多阶段...定义应用程序和静态作为两个阶段
因此,您只需指定git @ myserver:app.git作为“app”的存储库 和git @ myserver:static.git作为“静态”
的存储库然后一个简单的cap app deploy:migrations && cap static deploy
应该这样做。
但请记住这些不会同时发生
答案 1 :(得分:1)
我也希望发布更多既定的做法。我们根据Django书完成了我们的建议,该书建议将您的公共应用程序目录设置为网络目录。
这样做要好得多,因为只有当您的公共目录是静态目录时,scp才有效。许多应用程序会将内容写入公共目录,例如:图像生成即时。这些文件也需要立即复制到Web服务器。
我建议使用NFS,Samba Share等,以便您的公共目录实际上只是一个联网文件夹,因此当您写入它时,就像写入远程文件夹一样。
要将其整合到capistrano,我们执行以下操作: 在shared / public
中创建此联网文件夹部署后:update_code: 将内容从当前/公共移动到共享/公共(根据需要覆盖文件) 删除或重命名current / public然后symlink current / public到shared / public
缺点: *不会删除旧文件(就像之前说的那样) *没有真正的回滚选项(除了重新部署旧版本)
答案 2 :(得分:0)
我提出的最佳方法是实际将scp文件传输到Web服务器。