如何在 ruby 上 rails 上的开发环境中预编译资产?

How assets precompile in development environment on ruby on rails?

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

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

rake assets:precompile

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

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

RAILS_ENV=development bundle exec rake assets:precompile

开发环境默认可以使用config/development.rb

预编译资源
config.assets.debug = false

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

每个 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" />

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

指纹识别行为由 config.assets.digest 初始化选项控制(生产默认为 true,其他默认为 false)。

Precompiling Rails Assets for Development