1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Configuration changes for asset pipeline: remove config.assets.allow_debugging, add config.assets.compile and config.assets.digest

This commit is contained in:
Guillermo Iguaran 2011-08-30 09:42:35 -05:00
parent 4a60a9e0e1
commit f443f9cb0c
9 changed files with 49 additions and 56 deletions

View file

@ -46,10 +46,8 @@ namespace :assets do
env.precompile(*assets)
end
if config.assets.manifest
File.open("#{target}/manifest.yml", 'w') do |f|
YAML.dump(manifest, f)
end
File.open("#{target}/manifest.yml", 'w') do |f|
YAML.dump(manifest, f)
end
end
end

View file

@ -72,7 +72,7 @@ module Sprockets
private
def debug_assets?
Rails.application.config.assets.allow_debugging &&
Rails.application.config.assets.compile &&
(Rails.application.config.assets.debug ||
params[:debug_assets] == '1' ||
params[:debug_assets] == 'true')
@ -125,22 +125,21 @@ module Sprockets
return digest
end
if digest.nil? && Rails.application.config.assets.precompile_only
raise AssetNotPrecompiledError
if Rails.application.config.assets.compile
if asset = asset_environment[logical_path]
return asset.digest_path
end
return logical_path
else
raise AssetNotPrecompiledError.new("#{logical_path} isn't precompiled")
end
if asset = asset_environment[logical_path]
return asset.digest_path
end
logical_path
end
def rewrite_asset_path(source, dir)
if source[0] == ?/
source
else
source = digest_for(source) if performing_caching?
source = digest_for(source) if Rails.application.config.assets.digest
source = File.join(dir, source)
source = "/#{source}" unless source =~ /^\//
source
@ -154,11 +153,6 @@ module Sprockets
source
end
end
# When included in Sprockets::Context, we need to ask the top-level config as the controller is not available
def performing_caching?
config.action_controller.present? ? config.action_controller.perform_caching : config.perform_caching
end
end
end
end

View file

@ -26,10 +26,8 @@ module Sprockets
end
end
if config.assets.manifest
if File.exist?(path = File.join(Rails.public_path, config.assets.prefix, "manifest.yml"))
config.assets.digests = YAML.load_file(path)
end
if File.exist?(path = File.join(Rails.public_path, config.assets.prefix, "manifest.yml"))
config.assets.digests = YAML.load_file(path)
end
ActiveSupport.on_load(:action_view) do

View file

@ -33,6 +33,8 @@ class SprocketsHelperTest < ActionView::TestCase
@config = config
@config.action_controller ||= ActiveSupport::InheritableOptions.new
@config.perform_caching = true
@config.assets.digest = true
@config.assets.compile = true
end
def url_for(*args)
@ -160,7 +162,7 @@ class SprocketsHelperTest < ActionView::TestCase
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js\?body=1" type="text/javascript"></script>\n<script src="/assets/application-[0-9a-f]+.js\?body=1" type="text/javascript"></script>},
javascript_include_tag(:application, :debug => true)
@config.assets.allow_debugging = true
@config.assets.compile = true
@config.assets.debug = true
assert_match %r{<script src="/assets/xmlhr-[0-9a-f]+.js\?body=1" type="text/javascript"></script>\n<script src="/assets/application-[0-9a-f]+.js\?body=1" type="text/javascript"></script>},
javascript_include_tag(:application)
@ -201,7 +203,7 @@ class SprocketsHelperTest < ActionView::TestCase
assert_match %r{<link href="/assets/style-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />\n<link href="/assets/application-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />},
stylesheet_link_tag(:application, :debug => true)
@config.assets.allow_debugging = true
@config.assets.compile = true
@config.assets.debug = true
assert_match %r{<link href="/assets/style-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />\n<link href="/assets/application-[0-9a-f]+.css\?body=1" media="screen" rel="stylesheet" type="text/css" />},
stylesheet_link_tag(:application)

View file

@ -39,9 +39,8 @@ module Rails
@assets.prefix = "/assets"
@assets.version = ''
@assets.debug = false
@assets.allow_debugging = false
@assets.manifest = true
@assets.precompile_only = false
@assets.compile = true
@assets.digest = false
@assets.cache_store = [ :file_store, "#{root}/tmp/cache/assets/" ]
@assets.js_compressor = nil
@assets.css_compressor = nil

View file

@ -52,10 +52,6 @@ module <%= app_const_base %>
<% unless options.skip_sprockets? -%>
# Enable the asset pipeline
config.assets.enabled = true
# Create a manifest with the hashes of your assets when you run "rake assets:precompile".
# Use this if you don't have a JavaScript engine in your production servers
config.assets.manifest = true
<% end -%>
end
end

View file

@ -25,9 +25,6 @@
# Do not compress assets
config.assets.compress = false
# Allow pass debug_assets=true as a query parameter to load pages with unpackaged assets
config.assets.allow_debugging = true
# Expands the lines which load the assets
config.assets.debug = true
end

View file

@ -14,6 +14,12 @@
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

View file

@ -37,6 +37,8 @@ module ApplicationTests
test "assets do not require compressors until it is used" do
app_file "app/assets/javascripts/demo.js.erb", "<%= :alert %>();"
app_file "config/initializers/compile.rb", "Rails.application.config.assets.compile = true"
ENV["RAILS_ENV"] = "production"
require "#{app_path}/config/environment"
@ -62,18 +64,7 @@ module ApplicationTests
end
end
test "precompile don't create a manifest file when manifest option is off" do
app_file "app/assets/javascripts/application.js", "alert();"
app_file "config/initializers/manifest.rb", "Rails.application.config.assets.manifest = false"
capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile` }
end
assert !File.exist?("#{app_path}/public/assets/manifest.yml")
end
test "precompile creates a manifest file with all the assets listed when manifest option is on" do
test "precompile creates a manifest file with all the assets listed" do
app_file "app/assets/stylesheets/application.css.erb", "<%= asset_path('rails.png') %>"
app_file "app/assets/javascripts/application.js", "alert();"
@ -88,7 +79,7 @@ module ApplicationTests
assert_match /application-([0-z]+)\.css/, assets["application.css"]
end
test "assets do not require any assets group gem when manifest option is on and manifest file is present" do
test "assets do not require any assets group gem when manifest file is present" do
app_file "app/assets/javascripts/application.js", "alert();"
ENV["RAILS_ENV"] = "production"
@ -108,10 +99,8 @@ module ApplicationTests
assert !defined?(Uglifier)
end
test "assets raise AssetNotPrecompiledError if config.assets.precompile_only is on and file isn't precompiled" do
app_file "app/assets/javascripts/app.js", "alert();"
test "assets raise AssetNotPrecompiledError when manifest file is present and requested file isn't precompiled" do
app_file "app/views/posts/index.html.erb", "<%= javascript_include_tag 'app' %>"
app_file "config/initializers/precompile_only.rb", "Rails.application.config.assets.precompile_only = true"
app_file "config/routes.rb", <<-RUBY
AppTemplate::Application.routes.draw do
@ -120,15 +109,25 @@ module ApplicationTests
RUBY
ENV["RAILS_ENV"] = "production"
capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile` }
end
# Create file after of precompile
app_file "app/assets/javascripts/app.js", "alert();"
require "#{app_path}/config/environment"
class ::PostsController < ActionController::Base ; end
get '/posts'
assert_match /AssetNotPrecompiledError/, last_response.body
assert_match /app.js isn't precompiled/, last_response.body
end
test "precompile appends the md5 hash to files referenced with asset_path and run in the provided RAILS_ENV" do
app_file "app/assets/stylesheets/application.css.erb", "<%= asset_path('rails.png') %>"
# digest is default in false, we must enable it for test environment
app_file "config/initializers/compile.rb", "Rails.application.config.assets.digest = true"
# capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile RAILS_ENV=test` }
@ -139,6 +138,7 @@ module ApplicationTests
test "precompile appends the md5 hash to files referenced with asset_path and run in production as default even using RAILS_GROUPS=assets" do
app_file "app/assets/stylesheets/application.css.erb", "<%= asset_path('rails.png') %>"
app_file "config/initializers/compile.rb", "Rails.application.config.assets.compile = true"
ENV["RAILS_ENV"] = nil
capture(:stdout) do
@ -201,24 +201,27 @@ module ApplicationTests
assert_equal 200, last_response.status
end
test "assets are concatenated when debug is off and allow_debugging is off either if debug_assets param is provided" do
test "assets are concatenated when debug is off and compile is off either if debug_assets param is provided" do
app_with_assets_in_view
# config.assets.debug and config.assets.allow_debugging are false for production environment
# config.assets.debug and config.assets.compile are false for production environment
ENV["RAILS_ENV"] = "production"
capture(:stdout) do
Dir.chdir(app_path){ `bundle exec rake assets:precompile` }
end
require "#{app_path}/config/environment"
class ::PostsController < ActionController::Base ; end
# the debug_assets params isn't used if allow_debugging is off
# the debug_assets params isn't used if compile is off
get '/posts?debug_assets=true'
assert_match /<script src="\/assets\/application-([0-z]+)\.js" type="text\/javascript"><\/script>/, last_response.body
assert_no_match /<script src="\/assets\/xmlhr-([0-z]+)\.js" type="text\/javascript"><\/script>/, last_response.body
end
test "assets aren't concatened when allow_debugging is on and debug_assets params is true" do
test "assets aren't concatened when compile is true is on and debug_assets params is true" do
app_with_assets_in_view
app_file "config/initializers/allow_debugging.rb", "Rails.application.config.assets.allow_debugging = true"
app_file "config/initializers/compile.rb", "Rails.application.config.assets.compile = true"
ENV["RAILS_ENV"] = "production"
require "#{app_path}/config/environment"