rails 3.1 - 强制开发资产像3.0.x一样提供服务?

时间:2011-08-30 19:46:41

标签: ruby-on-rails asset-pipeline

我正在升级应用程序。目前3.1.rc8。

问题在于,在开发中,在每个请求中,似乎每个资产都通过rails堆栈运行。我们正在谈论,每个图像,js和css文件(并且有很多这些文件)。在第一次请求之后,它们都返回304,但它仍然很慢。

每次请求后都会有很多这样的内容:

Started GET "/assets/jquery-ui-1.8.16.custom.css?body=1" for 127.0.0.1 at 2011-08-30 15:36:21 -0400
Served asset /jquery-ui-1.8.16.custom.css - 304 Not Modified (0ms)

Started GET "/assets/yui.css?body=1" for 127.0.0.1 at 2011-08-30 15:36:21 -0400
Served asset /yui.css - 304 Not Modified (0ms)

如何在开发中使资产像在3.0.x中那样提供服务?

我也在使用这些标签来防止我的css / js被编译成dev中的单个文件:

= stylesheet_link_tag 'application', :debug => Rails.env.development?
= javascript_include_tag 'application', :debug => Rails.env.development?

这是我的application.rb

require File.expand_path('../boot', __FILE__)

require 'rails/all'

if defined?(Bundler)
  Bundler.require(:default, :assets, Rails.env)
end

module Fooapp
  class Application < Rails::Application
    config.encoding = "utf-8"

    config.filter_parameters += [:password, :password_confirmation]

    config.assets.enabled = true

    config.assets.version = '1.0'
  end
end

和development.rb:

Fooapp::Application.configure do

  config.cache_classes = false

  config.whiny_nils = true

  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  config.action_mailer.raise_delivery_errors = true

  config.active_support.deprecation = :log

  config.action_dispatch.best_standards_support = :builtin

  config.assets.compress = false

  config.assets.debug = true
end

2 个答案:

答案 0 :(得分:1)

Rails正在每个Sprockets资产请求上运行所有to_prepare挂钩 - 并且有很多宝石在其挂钩中执行大量工作。 (Rails自己也是间接攻击者,因为它也会在每个资产请求上重新加载一些代码)

请等待https://github.com/wavii/rails-dev-tweaks,而不是等待他们优化预加载挂钩(通常,或仅用于资产请求)。它在资产请求期间禁用预加载挂钩(包括代码重新加载)。

它也可以配置为您想要的任何其他请求类型

答案 1 :(得分:0)

我看到的缓慢主要与思考sphinx(在我的Gemfile中)有关。在开发过程中,TS会在每个页面请求中加载一些与I18n相关的内容。并且每个资产都被视为页面请求。

https://github.com/freelancing-god/thinking-sphinx/blob/v2.0.7/lib/thinking_sphinx/railtie.rb#L29

无论如何,TS的维护者都知道,并且主文件上不再存在该文件。在新版本发布之前,您可以在本地注释掉这两条I18n行。