Ruby on rails Heroku rails 3.1应用程序-本地编译资产与slug编译期间编译资产

Ruby on rails Heroku rails 3.1应用程序-本地编译资产与slug编译期间编译资产,ruby-on-rails,ruby,ruby-on-rails-3,heroku,asset-pipeline,Ruby On Rails,Ruby,Ruby On Rails 3,Heroku,Asset Pipeline,我正在Heroku Cedar stack上运行rails 3.1应用程序,它支持资产管道。Heroku将编译资产 在本地编译资产 在slug编译期间编译资产 在运行时编译资产 显然#3不利于性能,Heroku文档也建议不要使用它。但我不确定1和2之间哪个更好 #1要求您运行rakeassets:precompile,并将您的public/assets文件夹包含在git中。您的slug将更大,但我认为部署站点的停机时间将更低。但更大的弹头意味着应用程序启动更慢,所以这可能是一次失败 #2将使部署

我正在Heroku Cedar stack上运行rails 3.1应用程序,它支持资产管道。Heroku将编译资产

  • 在本地编译资产
  • 在slug编译期间编译资产
  • 在运行时编译资产
  • 显然#3不利于性能,Heroku文档也建议不要使用它。但我不确定1和2之间哪个更好

    #1要求您运行
    rakeassets:precompile
    ,并将您的
    public/assets
    文件夹包含在git中。您的slug将更大,但我认为部署站点的停机时间将更低。但更大的弹头意味着应用程序启动更慢,所以这可能是一次失败

    #2将使部署更新花费更长的时间,因为在Heroku端进行预编译。然而,你会有一个较小的鼻涕虫,并且没有太多的东西需要管理/记住

    我的问题是-哪个选项(1或2)最适合生产,为什么?


    到目前为止,它看起来像是选项2,但我想确保我没有忽略任何东西。

    这可能取决于您的资产文件夹的大小(可能一个长期的解决方案是将这些资产放在应用程序之外,并将其托管在S3或类似的系统上。)

    否则,我认为#1将是生产中最好的,因为任何资产都可以直接使用和缓存


    我正在阅读Heroku关于的文档部分,它们似乎表明#2将被使用,以防您忘记自己做这件事,作为一种方便。您不会得到一个小的slug,因为资产准备的结果将包含在slug中,以便部署自己

    我解决了其中一些问题,在这里我的问题中有一个大难题:

    如果它对我有用的话,我更喜欢#2,这样我就不必签入编译后的资产,因为这些资产只会膨胀git存储库

    在slug编译期间编译资产不会导致任何额外的停机时间,因为您现有的应用程序将一直运行到slug编译完成,所以无需担心


    我的建议是,如果你能让它对你有用的话。如果你最终选择了w/#1,那么最好的做法是在rake assets之前git rm-r public/assets:precompile以确保没有积垢残留。

    也是一个很好的读物-虽然它将Heroku上的应用程序中的资产同步到S3,所以它们仍然存在于你的slug中,只是Heroku没有提供。有时,2也不总是一个选项。Heroku总是在slug编译期间首先尝试编译它们,如果失败,则在运行时编译。非常有趣的是slug大小并没有变小。谢谢你的信息。但是为什么在#1中缓存与在#2中缓存不同呢?更新:升级到Desive 1.5.0后,选项#2现在对我来说很有用-比签入资产更干净。如果你除了#1之外别无选择,最好创建一个rake任务部署到Heroku。它将1)删除公共/资产2)预编译资产3)将新编译的资产签入git 4)推送到heroku。2)也是我的首选选项-但我一直不明白为什么要花这么长时间才能完成。它应该只是一打左右的文件和gziping。也许缩小需要最长的时间来检查语法等?任何见解都值得赞赏。@BrianArmstrong,我想你是对的,编译中最长的部分是缩小。你可能想看看我的turbo-sprockets-rails3 gem,它可以减少你的资产:预编译时间减半。()