mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Backport f443f9cb0c
to master
This commit is contained in:
parent
fa04c37f45
commit
f236e00189
8 changed files with 41 additions and 52 deletions
|
@ -47,10 +47,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
|
||||
|
|
|
@ -61,7 +61,7 @@ module Sprockets
|
|||
def debug_assets?
|
||||
begin
|
||||
config = Rails.application.config.assets
|
||||
config.allow_debugging && (config.debug || params[:debug_assets])
|
||||
config.compile && (config.debug || params[:debug_assets])
|
||||
rescue NoMethodError
|
||||
false
|
||||
end
|
||||
|
@ -114,22 +114,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
|
||||
|
@ -143,16 +142,6 @@ module Sprockets
|
|||
source
|
||||
end
|
||||
end
|
||||
|
||||
def performing_caching?
|
||||
# When included in Sprockets::Context, we need to ask the
|
||||
# top-level config as the controller is not available.
|
||||
if config.action_controller.present?
|
||||
config.action_controller.perform_caching
|
||||
else
|
||||
config.perform_caching
|
||||
end
|
||||
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
|
||||
|
|
|
@ -30,6 +30,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)
|
||||
|
@ -157,7 +159,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)
|
||||
|
@ -198,7 +200,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)
|
||||
|
|
|
@ -41,9 +41,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
|
||||
|
|
|
@ -30,9 +30,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
|
||||
|
|
Loading…
Reference in a new issue