Ruby on rails 为“cap部署”提供更好的Rails 3资产处理`

Ruby on rails 为“cap部署”提供更好的Rails 3资产处理`,ruby-on-rails,capistrano,assets,sprockets,precompile,Ruby On Rails,Capistrano,Assets,Sprockets,Precompile,我注意到默认的“部署”任务在远程机器上执行资产预编译,这会产生以下不良影响: 在预编译期间(在实时站点上)出现奇怪的故障资产 配置中的错误导致停机,响应代码为500 这项任务需要很长时间 我已经看到了这一点,它通过在没有任何要预编译的内容时不导致您进行预编译,稍微缓解了问题: 但必须有更好的解决办法 有人试过这些吗: 始终部署到“暂存”位置,在那里您可以测试所有内容,然后添加某种cap-enivilen任务,以某种方式通知web服务器前端开始使用另一个端口?(我可以通过编辑nginx上游并重

我注意到默认的“部署”任务在远程机器上执行资产预编译,这会产生以下不良影响:

  • 在预编译期间(在实时站点上)出现奇怪的故障资产
  • 配置中的错误导致停机,响应代码为500
  • 这项任务需要很长时间
我已经看到了这一点,它通过在没有任何要预编译的内容时不导致您进行预编译,稍微缓解了问题:

但必须有更好的解决办法

有人试过这些吗:

  • 始终部署到“暂存”位置,在那里您可以测试所有内容,然后添加某种
    cap-enivilen
    任务,以某种方式通知web服务器前端开始使用另一个端口?(我可以通过编辑nginx
    上游
    并重新启动它来手动管理这一点,然后我可以通过
    nginx.conf
    中的include和一个cap任务将其绑定在一起来自动化这一点。)
  • 本地预编译,然后通过rsync简单地将文件推送到上面。我更喜欢#1,但这将是一个较小的步骤,可能比当前的行为更适合作为默认值
  • 我错过了什么明显的东西吗?我对Rails assets+Capistrano部署还不熟悉,但在这一次部署中似乎没有现成的最佳部署实践。

    您可以:

    • 部署前预编译资产
    • 在后台在服务器端编译它
    • 将其留给
      延迟的\u作业
      或其他队列管理系统

    你好,亚历山大!如果您进行预编译,如何将其集成到Capistrano
    deploy
    中,使其不会在服务器上预编译?我不确定,但如果可以在服务器上使用本地预编译的资产,您可以预编译它,然后使用Capistrano上载方法上载到服务器。