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

Posted

技术标签:

【中文标题】关于 rake 资产的困惑:在 rails 中的资产管道上清理 / 清理【英文标题】:Confusion about rake assets:clean / cleanup on the asset pipeline in rails 【发布时间】:2012-03-09 07:10:03 【问题描述】:

有人可以向我解释一下命令rake assets:clean 的真正作用吗?不幸的是,Rails Guides 没有提到它。还有命令rake assets:cleanup。有什么区别?

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

谢谢大家

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

您好,谢谢您的回答。你能给我解释一下because it will serve precompiled files instead这一步吗?你的意思是当我在本地更改这些文件时?预编译文件和编译文件有什么区别?谢谢男人 在您的 html 中,指向资产的链接看起来像 '/assets/blah-blah.css. In development mode this is what happens: webserver looks for /public/assets/blah-blah.css` 并在找到时提供。否则,它会查找/app/assets/stylesheets/blah-blah.scss 并尝试编译并提供它。如果您不预编译资产,您将始终获得最新版本的代码。 谢谢人。你的最后一句话让我再次思考,但现在我明白了。所以我为生产预编译了我的资产,所以 Rails 不需要自己编译文件? 此答案已过时,请查找其他答案以获取 Rails 4 的最新信息【参考方案2】:

使用git clean -f 清理文件,git clean -f -d 清理目录

【讨论】:

【参考方案3】:

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 删除旧版本的预编译资产,同时保留新资产。

【讨论】:

【参考方案4】:

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

【讨论】:

谢谢!搜索了一段时间为什么我的 CSS 更改没有被拾取。从未听说过“assets:clobber”,但它确实有效! 见鬼是的。我不是 100% 确定,但我想也许我注意到 assets:clean 没有像我升级到使用 ruby​​ 2.2.0 时那样工作。在此之前我从未听说过 assets:clobber,但它的工作原理是 assets:clean 在以前的版本(1.9.3?)中所做的 这是我的救命稻草!花了一个小时试图弄清楚为什么我的 CSS 更改没有被编译:( 想解释一下为什么会这样?在那之前,我不能投票赞成你的答案,坦率地说没有人应该,所以答案应该帮助人们理解这个问题,而不仅仅是提供一行代码。【参考方案5】:

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

【讨论】:

【参考方案6】:

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

cap deploy:clean 删除旧版本,通常来自远程服务器。不是rake assets:clean

耙!= 上限

【讨论】:

以上是关于关于 rake 资产的困惑:在 rails 中的资产管道上清理 / 清理的主要内容,如果未能解决你的问题,请参考以下文章

在'rake assets:precompile'之后,Rails 4 资产未加载到 Heroku

Rails 不会编译资产,但会在日志中显示编译,rake assets:precompile not generate files

Rails 4 - AwesomeEotPath 之后 Rake 中止,无效的 CSS

Capistrano在部署时失败:资产:使用SSHKit预编译:: Command :: Failed:rake退出状态:1

ExecJS :: ProgramError:运行rake资产时意外的标记点«(»,预期的点«:»:在生产中进行预编译

Rails 4 Heroku 资产:预编译失败