【问题标题】:How assets precompile in development environment on ruby on rails?如何在 ruby​​ on rails 的开发环境中预编译资产?
【发布时间】:2015-12-14 07:00:44
【问题描述】:

为什么我们不能在开发环境中预编译资产?我知道 sprockets 基本上可以编译所有资产。

当我们进入生产环境时,我们运行命令:

rake assets:precompile

但是在开发环境中,我们不能做任何事情来编译它自己。 两种环境下资产编译的行为有何不同?

【问题讨论】:

    标签: ruby-on-rails ruby heroku sprockets


    【解决方案1】:

    如果你想在开发环境中预编译资产,你可以使用这个命令:

    RAILS_ENV=development bundle exec rake assets:precompile
    

    您可以在开发环境中默认使用 config/development.rb 预编译资产

    config.assets.debug = false
    

    在大多数情况下,您不需要它,因为您的开发过程会更加困难。

    【讨论】:

    • 你能详细说明config.assets.compile = false的目的吗
    • 这个问题有一个很好的答案:stackoverflow.com/a/8827757/589620
    • 什么 config.assets.compile = false 是说不要使用已编译的资产,只需选择资产文件夹中的所有内容,但如果将其设置为 true ,则预期您已编译资产和 rails 将正在寻找那些编译的资产。
    • 这是问题的答案。
    【解决方案2】:

    每个 Web 应用程序都包含一些图像和 CSS 文件以使其看起来更漂亮,以及一些 JavaScript 文件来处理用户交互和行为。如果资产加载速度更快,则 Web 应用程序应该会执行得更好。有许多策略可以使资源快速加载,例如缩小、压缩(gzipping)、缓存等。

    在开发模式下,资产按照清单文件中指定的顺序作为单独的文件提供。

    此清单 app/assets/javascripts/application.js:

    //= require core
    //= require projects
    //= require tickets
    

    在生产环境中,Sprockets 使用上述指纹方案。默认情况下,Rails 假定资产已经预编译,并将由您的 Web 服务器作为静态资产提供。

    在预编译阶段,从已编译文件的内容生成 MD5,并在将文件写入光盘时插入文件名。 Rails 助手使用这些指纹名称代替清单名称。

    例如:

    <%= javascript_include_tag "application" %>
    <%= stylesheet_link_tag "application" %>
    

    产生类似这样的东西:

    <script src="/assets/application-908e25f4bf641868d8683022a5b62f54.js"></script>
    <link href="/assets/application-4dd5b109ee3439da54f5bdfd78a80473.css" media="screen"
    rel="stylesheet" />
    

    注意:对于资产管道,不再使用 :cache 和 :concat 选项,请从 javascript_include_tag 和 stylesheet_link_tag 中删除这些选项。

    指纹行为由 config.assets.digest 初始化选项控制(对于生产默认为 true,对于其他所有内容默认为 false)。

    Precompiling Rails Assets for Development

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      相关资源
      最近更新 更多