关于 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