Permalink
Browse files

Add ability for relative_url_root to be specified via an environment …

…variable RAILS_RELATIVE_URL_ROOT. Closes #4243.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3931 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent fddd33b commit 240213177eba35921f9ee621e8865311b94f6d21 @seckar seckar committed Mar 18, 2006
Showing with 26 additions and 2 deletions.
  1. +2 −0 actionpack/CHANGELOG
  2. +11 −2 actionpack/lib/action_controller/request.rb
  3. +13 −0 actionpack/test/controller/request_test.rb
View
@@ -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]
@@ -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.
@@ -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

0 comments on commit 2402131

Please sign in to comment.