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

时间:2012-02-17 21:40:05

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline

有人可以向我解释命令rake assets:clean的真正含义吗?不幸的是Rails指南不提它。还有命令rake assets:cleanup。差异是什么?

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

全部谢谢

6 个答案:

答案 0 :(得分:65)

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

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

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

在我的项目中,资产被预编译为部署的一部分。卡皮斯特拉诺非常容易。

另外,我从未听说过rake assets:cleanup

答案 1 :(得分:51)

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

答案 2 :(得分:24)

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

在Rails 4中,您运行rake assets:clobber来执行相同的操作。

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

# config/environments/production.rb
config.assets.digest = true

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

答案 3 :(得分:7)

rake assets:clean删除已编译的资产。它由cap deploy:assets:clean运行,通常从远程服务器中删除已编译的资产。

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

rake!= cap

答案 4 :(得分:1)

rake assets:clean现在由cap deploy:cleanup_assets运行。将require 'capistrano/rails/assets'添加到您的Capfile中,即可获得此上限任务。我的capistrano版本是v3.2.1。

答案 5 :(得分:-4)

清理那些未跟踪的文件,文件为git clean -f,目录为git clean -f -d