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

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

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

谢谢大家

【问题讨论】:

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


    【解决方案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

          耙!= 上限

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-28
            • 2012-04-17
            • 1970-01-01
            • 1970-01-01
            • 2019-01-18
            • 1970-01-01
            相关资源
            最近更新 更多