仅将静态资产部署到具有单独应用服务器的Web服务器

时间:2011-06-09 19:13:48

标签: ruby-on-rails git deployment nginx capistrano

使用Rails 3.0.7和git,使用capistrano进行部署。我使用不同的机器作为网络和应用程序服务器。我无法将应用程序代码部署到Web服务器,只能部署静态资产 - 基本上是public /文件夹。

这似乎很常见,但没有运气寻找最佳做法。

是否有任何东西围绕capistrano来处理这种情况?否则,我在考虑添加任务来创建结构,但scp来自应用服务器的公共目录将是解决方案。

3 个答案:

答案 0 :(得分:1)

所以我假设有一个商业原因你无法将应用程序部署到其他服务器上?

如果没有,那么只需部署整个代码 并将您的Web服务器配置为仅提供公用文件夹。

(在Apache / Passenger中,配置将完全相同,你只是不会在静态服务器上启用乘客)

这是唯一的简单方法.. 否则你会让自己感到头痛......

然而,我会想办法解决这个问题。


如果确实需要部署静态代码 然后我建议你创建两个存储库

  1. 应用程序(例如git @ myserver:app.git
  2. 静态文件(例如git @ myserver:static.git)
  3. 现在在您的应用中包含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服务器。