10 ruby ruby-on-rails heroku sprockets
为什么我们不能在开发环境中预编译资产?我知道sprockets基本上编译所有资产.
当我们进入生产环境时,我们运行命令:
rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
但是在开发环境中,我们无法为它编译自己做任何事情.两种环境中资产编译的行为有何不同?
Ale*_*ack 20
如果要在开发环境中预编译资源,可以使用以下命令:
RAILS_ENV=development bundle exec rake assets:precompile
Run Code Online (Sandbox Code Playgroud)
您可以使用config/development.rb在开发环境中预编译资产
config.assets.debug = false
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,您不需要它,因为您的开发过程会更加困难.
每个Web应用程序都包含一些图像和CSS文件,使其看起来很漂亮,还有一些JavaScript文件来处理用户交互和行为.如果资产加载速度加快,Web应用程序应该表现得更好.有许多策略可以使资产快速加载,例如缩小,压缩(gzipping),缓存等.
在开发模式下,资产按清单文件中指定的顺序作为单独的文件提供.
这个清单app/assets/javascripts/application.js:
//= require core
//= require projects
//= require tickets
Run Code Online (Sandbox Code Playgroud)
在生产环境中,Sprockets使用上面概述的指纹识别方案.默认情况下,Rails假设资产已经过预编译,并且将由Web服务器作为静态资产提供.
在预编译阶段,MD5从编译文件的内容生成,并在写入光盘时插入文件名.Rails助手使用这些指纹名称代替清单名称.
例如:
<%= javascript_include_tag "application" %>
<%= stylesheet_link_tag "application" %>
Run Code Online (Sandbox Code Playgroud)
生成这样的东西:
<script src="/assets/application-908e25f4bf641868d8683022a5b62f54.js"></script>
<link href="/assets/application-4dd5b109ee3439da54f5bdfd78a80473.css" media="screen"
rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)
注意:使用Asset Pipeline:不再使用:cache和:concat选项,请从javascript_include_tag和stylesheet_link_tag中删除这些选项.
指纹识别行为由config.assets.digest初始化选项控制(对于生产,默认为true,对于其他所有选项,默认为false).
| 归档时间: |
|
| 查看次数: |
17907 次 |
| 最近记录: |