diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 07dc50d39892e48d4c9d69ec3a666d494d57b111..2aff18340bafc05c1ec0d6196bdf12351f626d6a 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Add ability for relative_url_root to be specified via an environment variable RAILS_RELATIVE_URL_ROOT. [isaac@reuben.com, Nicholas Seckar] + * Fixed link_to "somewhere", :post => true to produce valid XHTML by using the parentnode instead of document.body for the instant form #3007 [Bob Silva] * Added :function option to PrototypeHelper#observe_field/observe_form that allows you to call a function instead of submitting an ajax call as the trigger #4268 [jonathan@daikini.com] diff --git a/actionpack/lib/action_controller/request.rb b/actionpack/lib/action_controller/request.rb index 3bfc8f938517928b67f8a8a37104726780a51168..566ae42ba09f818293b43160589ebd3cbfb66f46 100755 --- a/actionpack/lib/action_controller/request.rb +++ b/actionpack/lib/action_controller/request.rb @@ -163,9 +163,18 @@ def path end # Returns the path minus the web server relative installation directory. - # This method returns nil unless the web server is apache. + # This can be set with the environment variable RAILS_RELATIVE_URL_ROOT. + # It can be automatically extracted for Apache setups. If the server is not + # Apache, this method returns an empty string. def relative_url_root - @@relative_url_root ||= server_software == 'apache' ? @env["SCRIPT_NAME"].to_s.sub(/\/dispatch\.(fcgi|rb|cgi)$/, '') : '' + @@relative_url_root ||= case + when @env["RAILS_RELATIVE_URL_ROOT"] + @env["RAILS_RELATIVE_URL_ROOT"] + when server_software == 'apache' + @env["SCRIPT_NAME"].to_s.sub(/\/dispatch\.(fcgi|rb|cgi)$/, '') + else + '' + end end # Returns the port number of this request as an integer. diff --git a/actionpack/test/controller/request_test.rb b/actionpack/test/controller/request_test.rb index a7623f34036a0897222e609f9e4a792db4b36af4..43cd8836fe254615605ef8848077011014355398 100644 --- a/actionpack/test/controller/request_test.rb +++ b/actionpack/test/controller/request_test.rb @@ -105,6 +105,19 @@ def test_relative_url_root @request.relative_url_root = nil @request.env['SCRIPT_NAME'] = "/collaboration/hieraki" assert_equal "/collaboration/hieraki", @request.relative_url_root + + @request.relative_url_root = nil + @request.env['SCRIPT_NAME'] = "/hieraki/dispatch.cgi" + @request.env['SERVER_SOFTWARE'] = 'lighttpd/1.2.3' + @request.env['RAILS_RELATIVE_URL_ROOT'] = "/hieraki" + assert_equal "/hieraki", @request.relative_url_root + + # @env overrides path guess + @request.relative_url_root = nil + @request.env['SCRIPT_NAME'] = "/hieraki/dispatch.cgi" + @request.env['SERVER_SOFTWARE'] = 'apache/1.2.3 some random text' + @request.env['RAILS_RELATIVE_URL_ROOT'] = "/real_url" + assert_equal "/real_url", @request.relative_url_root end def test_request_uri