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:
parent
4a60a9e0e1
commit
f443f9cb0c
9 changed files with 49 additions and 56 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue