【问题标题】:Safely recompiling all assets on Rails 4 deployment?在 Rails 4 部署中安全地重新编译所有资产?
【发布时间】:2013-12-10 19:01:28
【问题描述】:

现在我偶尔会遇到 Rails 4 资产管道问题,需要删除所有资产然后重新创建资产。

在部署期间,从 git 中提取最新版本后,我通过在我的服务器上运行 rake assets:clobberrake assets:precompile 来刷新资产。问题在于,在移除资产期间,页面得到服务,这并不奇怪,没有资产。

是否有强制 Rails 重新编译所有资产而不必运行assets:clobber

【问题讨论】:

  • 偶尔会出现什么问题?这就是你应该解决的问题。你能详细说明一下这个问题,或者想出重现它的步骤吗?

标签: ruby-on-rails ruby-on-rails-4 asset-pipeline sprockets


【解决方案1】:

这是我在预编译资产时通常会做的事情。

// At a terminal, remove all assets from the file system
$ rm -rf public/assets  
// Precompile the assets
$ rake assets:precompile

一直为我工作。

【讨论】:

  • 这就是clobber的本质。问题是当该目录被删除时,传入的请求没有资产。
  • 第二个命令将从头开始编译资产......但是,它不会在你的盒子上这样做,对吧?
  • precompile 有效,问题是有一个窗口在/public/assets 中什么都没有
  • 这是否发生在您的生产环境中?如果是这样,您在哪里托管您的应用程序?如果这发生在您的开发环境中,您不应该预编译资产,而是动态地提供它们,以便您可以测试您的更改。我只是不明白为什么您必须在已经部署资产时重新编译它们。您应该将它们作为部署的一部分进行预编译。
  • 它在生产中。不幸的是,它只需要接受所有更改。
【解决方案2】:

首先运行rake assets:precompile,然后运行rake assets:clean。那只会删除旧资产。 https://github.com/rails/sprockets-rails/blob/master/README.md#rake-task

【讨论】:

  • 所以在 Rails 4 precompile 中尝试只编译新文件,但我遇到了一些问题,无法 100% 工作(尤其是对于 Less gem)。所以这个解决方案的问题是它不会重新编译它认为没有改变的文件。
  • 一种解决方案是通过 CDN 托管它,该 CDN 将在您的 clobber 时间缓存资产
  • 杰夫·迪基讲道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2014-06-14
  • 1970-01-01
相关资源
最近更新 更多