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

时间:2015-09-17 11:59:45

标签: ruby-on-rails ruby heroku sprockets

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

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

rake assets:precompile

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

2 个答案:

答案 0 :(得分:18)

如果要在开发环境中预编译资源,可以使用以下命令:

achul@achul:~/chennai/misclaneous$ vi memory.c
#include<stdio.h>
main()
{
}
achul@achul:~/chennai/misclaneous$ cc memory.c -o mem
achul@achul:~/chennai/misclaneous$ size mem
   text    data     bss     dec     hex filename
   1056     252       8    1316     524 mem

您可以使用config / development.rb

默认在开发环境中预编译资产
RAILS_ENV=development bundle exec rake assets:precompile

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

答案 1 :(得分:6)

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