关于rake资产的困惑:清理/清理rails中的资产管道

dan*_*iel 58 ruby-on-rails ruby-on-rails-3 asset-pipeline

有人可以向我解释这个命令到底rake assets:clean是做什么的吗?不幸的是Rails指南不提它.还有命令rake assets:cleanup.有什么不同?

此外,有人可以告诉我什么时候必须rake assets:precompile在生产中运行.在将所有应用程序文件部署到生产服务器后,是否在服务器控制台上运行它?或者我precompile在本地计算机上然后部署所有文件?

谢谢大家

Ser*_*sev 65

注意:这个答案特定于rails 3.对于rails 4及更高版本,请在此处查看其他答案.

如果在本地计算机上进行预编译,则可以将这些生成的资产提交到存储库并继续部署.无需在生产机器上编译它们.

但它引入了一个问题:现在当您更改源文件(coffescript/scss)时,应用程序将不会接收更改,因为它将提供预编译文件.rake assets:clean删除这些预编译的文件.

在我的项目中,资产被预编译为部署的一部分.Capistrano让它变得非常简单.

而且,我从来没有听说过rake assets:cleanup.

  • 在你的html中,资产链接看起来像'/ assets/blah-blah.css`.在开发模式中,会发生这种情况:webserver查找`/ public/assets/blah-blah.css`并在找到时提供服务.否则,它会查找`/ app/assets/stylesheets/blah-blah.scss`并尝试编译并提供它.如果您不预编译资产,您将始终获得最新的代码版本. (5认同)

Fah*_*tel 55

运行rake assets:clobber以实际清理资产. http://www.dixis.com/?p=735


小智 26

在Rails 3中,Sergio的答案是完全正确的. rake assets:clean删除了之前预先编译到public/assets目录中的所有资产.

在Rails 4中,你可以rake assets:clobber做同样的事情.

如果rake assets:precompile使用以下配置运行(默认情况下在暂存和生产中打开):

# config/environments/production.rb
config.assets.digest = true
Run Code Online (Sandbox Code Playgroud)

您编译的资产得到时间戳.这意味着您可以在保留旧资产的同时编译新资产.您通常希望在生产中执行此操作,以便您在运行时仍然可以访问旧文件precompile以创建新文件(因为您添加了新的css/javascript).您现在想要删除不再使用的旧文件.的clean同时使新资产代替它消除了预编译的资产的旧版本.


pau*_*elt 7

rake assets:clean删除已编译的资产 它cap deploy:assets:clean通常用于从远程服务器中删除已编译的资产.

cap deploy:clean通常从远程服务器删除旧版本.它不是rake assets:clean

耙!=帽