mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix a bug in ActionDispatch::Static where Rails cannot find assets if started in another directory which is not the RAILS_ROOT.
This commit is contained in:
parent
336cb3c0bf
commit
4e92134dfa
6 changed files with 21 additions and 7 deletions
|
@ -38,22 +38,22 @@ module ActionController #:nodoc:
|
|||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
@@page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : ""
|
||||
##
|
||||
# :singleton-method:
|
||||
# The cache directory should be the document root for the web server and is set using <tt>Base.page_cache_directory = "/document/root"</tt>.
|
||||
# For Rails, this directory has already been set to Rails.public_path (which is usually set to <tt>RAILS_ROOT + "/public"</tt>). Changing
|
||||
# this setting can be useful to avoid naming conflicts with files in <tt>public/</tt>, but doing so will likely require configuring your
|
||||
# web server to look in the new location for cached files.
|
||||
@@page_cache_directory = ''
|
||||
cattr_accessor :page_cache_directory
|
||||
|
||||
@@page_cache_extension = '.html'
|
||||
##
|
||||
# :singleton-method:
|
||||
# Most Rails requests do not have an extension, such as <tt>/weblog/new</tt>. In these cases, the page caching mechanism will add one in
|
||||
# order to make it easy for the cached files to be picked up properly by the web server. By default, this cache extension is <tt>.html</tt>.
|
||||
# If you want something else, like <tt>.php</tt> or <tt>.shtml</tt>, just set Base.page_cache_extension. In cases where a request already has an
|
||||
# extension, such as <tt>.xml</tt> or <tt>.rss</tt>, page caching will not add an extension. This allows it to work well with RESTful apps.
|
||||
@@page_cache_extension = '.html'
|
||||
cattr_accessor :page_cache_extension
|
||||
end
|
||||
|
||||
|
|
|
@ -32,8 +32,6 @@ module ActionController
|
|||
def rescue_action(env)
|
||||
raise env["action_dispatch.rescue.exception"]
|
||||
end
|
||||
|
||||
self.page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : ""
|
||||
end
|
||||
|
||||
# For old tests
|
||||
|
|
|
@ -44,6 +44,12 @@ module ActionController
|
|||
ActiveSupport.on_load(:action_controller) { self.logger ||= Rails.logger }
|
||||
end
|
||||
|
||||
initializer "action_controller.page_cache_directory" do
|
||||
ActiveSupport.on_load(:action_controller) do
|
||||
self.page_cache_directory = Rails.public_path
|
||||
end
|
||||
end
|
||||
|
||||
initializer "action_controller.set_configs" do |app|
|
||||
paths = app.config.paths
|
||||
ac = app.config.action_controller
|
||||
|
|
|
@ -92,11 +92,12 @@ module Rails
|
|||
end
|
||||
|
||||
def public_path
|
||||
@@public_path ||= self.root ? File.join(self.root, "public") : "public"
|
||||
application && application.paths.public.to_a.first
|
||||
end
|
||||
|
||||
def public_path=(path)
|
||||
@@public_path = path
|
||||
ActiveSupport::Deprecation.warn "Setting Rails.public_path= is deprecated. " <<
|
||||
"Please set paths.public = in config/application.rb instead.", caller
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -137,7 +137,7 @@ module Rails
|
|||
|
||||
def default_middleware_stack
|
||||
ActionDispatch::MiddlewareStack.new.tap do |middleware|
|
||||
middleware.use('::ActionDispatch::Static', lambda { Rails.public_path }, :if => lambda { serve_static_assets })
|
||||
middleware.use('::ActionDispatch::Static', lambda { paths.public.to_a.first }, :if => lambda { serve_static_assets })
|
||||
middleware.use('::Rack::Lock', :if => lambda { !allow_concurrency })
|
||||
middleware.use('::Rack::Runtime')
|
||||
middleware.use('::Rails::Rack::Logger')
|
||||
|
|
|
@ -184,6 +184,15 @@ module ApplicationTests
|
|||
end
|
||||
end
|
||||
|
||||
test "config.paths.public sets Rails.public_path" do
|
||||
add_to_config <<-RUBY
|
||||
config.paths.public = "somewhere"
|
||||
RUBY
|
||||
|
||||
require "#{app_path}/config/application"
|
||||
assert_equal File.join(app_path, "somewhere"), Rails.public_path
|
||||
end
|
||||
|
||||
def make_basic_app
|
||||
require "rails"
|
||||
require "action_controller/railtie"
|
||||
|
|
Loading…
Reference in a new issue