【问题标题】:Deploy static assets only to a web server with separate app server仅将静态资产部署到具有单独应用服务器的 Web 服务器
【发布时间】:2011-09-11 23:37:34
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    所以我认为您无法将应用程序部署到其他服务器是出于业务原因?

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

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

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

    不过我会想办法解决这个问题。


    如果您确实只需要部署静态代码 那么我建议你创建两个存储库

    1. 应用程序(例如 git@myserver:app.git
    2. 静态文件(例如 git@myserver:static.git)

    现在在您的应用中包含 git@myserver:static.git 作为安装在 public/ 的子模块

    完成此操作后,您应该搜索标准 capistrano 配方以使用 git 子模块进行部署(特别是我想您会想要存储子模块的本地缓存,更新它,然后以某种方式使用 git submodule init

    然后你可以有两个 capistrano 食谱

    我建议你看看 capistrano multi-stage... 将 app 和 static 定义为两个阶段

    因此,您可以将 git@myserver:app.git 指定为“app”的存储库 和 git@myserver:static.git 作为“静态”的存储库

    那么一个简单的cap app deploy:migrations && cap static deploy 就可以了。

    但请记住,这些不会同时发生

    【讨论】:

    • 感谢您的详细回复。业务需求是安全性——无需在 Web 服务器上公开任何代码。我选择编写自己的规则,手动设置并行发布结构,并使用 scp 仅将 /public/ 目录从应用服务器复制到 Web 服务器。
    • scp 可能有效,但您可能会发现在 ssh 上使用 rsync 会更好。像rsync -r -h -v -a -e "ssh" deploy/current/public webserver:files/public 这样的东西,您可以在 capistrano 中将其作为“after :update_code”运行,但问题是如果您不使用 capistrano 的符号链接发布结构,至少使用 rsync,您如何管理静态资产的回滚,如果您更改名称文件,旧文件将保留在服务器上(假设您使用 -a, "archive", 标志)
    【解决方案2】:

    我也希望能发布更多既定做法。我们已经根据 Django 书完成了我们的工作,该书建议将您的公共应用程序目录设为网络目录。

    这要好得多,因为 scp 仅在您的公共目录是静态的情况下才有效。许多应用程序会将内容写入公共目录,例如即时生成图像。这些文件也需要立即复制到网络服务器。

    我建议使用 NFS、Samba 共享或类似的,这样您的公共目录实际上只是一个网络文件夹,所以当您写入它时,就像写入远程文件夹一样。

    要将其集成到 capistrano 中,我们执行以下操作: 在共享/公共中创建此网络文件夹

    部署后:update_code: 将内容从当前/公共移动到共享/公共(根据需要覆盖文件) 删除或重命名 current/public 然后将 current/public 符号链接到 shared/public

    缺点: * 不会删除旧文件(就像之前有人说的那样) * 没有真正的回滚选项(除了重新部署旧版本)

    【讨论】:

      【解决方案3】:

      我想出的最佳方法实际上是将 scp 文件传送到 Web 服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-21
        • 2020-03-11
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多