packages: apache-mod_rails/apache-mod_rails.spec, apache-mod_rails/apache-m...

baggins baggins at pld-linux.org
Thu Mar 4 01:04:17 CET 2010


Author: baggins                      Date: Thu Mar  4 00:04:17 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- add Alias support, details in patch

---- Files affected:
packages/apache-mod_rails:
   apache-mod_rails.spec (1.6 -> 1.7) , apache-mod_rails-alias+public.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/apache-mod_rails/apache-mod_rails.spec
diff -u packages/apache-mod_rails/apache-mod_rails.spec:1.6 packages/apache-mod_rails/apache-mod_rails.spec:1.7
--- packages/apache-mod_rails/apache-mod_rails.spec:1.6	Wed Mar  3 17:16:40 2010
+++ packages/apache-mod_rails/apache-mod_rails.spec	Thu Mar  4 01:04:11 2010
@@ -20,6 +20,7 @@
 Source0:	http://rubygems.org/downloads/passenger-%{version}.gem
 # Source0-md5:	c116ed533ef00eccaffb5a3568cdfd23
 Source1:	%{name}.conf
+Patch0:		%{name}-alias+public.patch
 URL:		http://www.modrails.com
 BuildRequires:	apache-base >= 2.0.55-1
 BuildRequires:	apache-devel >= 2.0.55-1
@@ -68,6 +69,7 @@
 %setup -q -c
 %{__tar} xf %{SOURCE0} -O data.tar.gz | %{__tar} xz
 find -newer README -o -print | xargs touch --reference %{SOURCE0}
+%patch0 -p0
 
 # TODO : ugly metod - but works
 %{__sed} -i 's/CXXFLAGS = "/CXXFLAGS = "`pkg-config --cflags apr-util-1`/ ' Rakefile
@@ -144,6 +146,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.7  2010/03/04 00:04:11  baggins
+- add Alias support, details in patch
+
 Revision 1.6  2010/03/03 16:16:40  baggins
 - setup.rb is not able to do the job, we have to install manually
 

================================================================
Index: packages/apache-mod_rails/apache-mod_rails-alias+public.patch
diff -u /dev/null packages/apache-mod_rails/apache-mod_rails-alias+public.patch:1.1
--- /dev/null	Thu Mar  4 01:04:17 2010
+++ packages/apache-mod_rails/apache-mod_rails-alias+public.patch	Thu Mar  4 01:04:11 2010
@@ -0,0 +1,263 @@
+
+http://code.google.com/p/phusion-passenger/issues/detail?id=30&colspec=ID%20Type%20Status%20Priority%20Milestone%20Stars%20Summary
+http://code.google.com/p/phusion-passenger/issues/detail?id=136&colspec=ID%20Type%20Status%20Priority%20Milestone%20Stars%20Summary
+
+Problem: The problem with RailsBaseURI is that it expects Rails directory
+to be in virtualhost's documentroot. If it does'nt then you have to create
+symlink to use rails application outside of document root.
+
+Fix: Instead of creating symlinks there could be second optional argument
+for RailsBaseURI which specifies full path to Rails application's public
+directory.
+
+For example, instead of creating symlink /var/www/somehost/railsapp1 ->
+/home/user/railsapp1/public and:
+<virtualhost *>
+DocumentRoot /var/www/somehost
+RailsBaseURI /railsapp1
+</virtualhost>
+
+we skip the symlink and specify the full path in apache conf:
+<virtualhost *>
+DocumentRoot /var/www/somehost
+RailsBaseURI /railsapp1 /home/user/railsapp1/public
+</virtualhost>
+
+The patch (for 2.0.3) that does the thing is attached (patches also
+RackBaseURI).
+
+The combined patch:
+
+1) Aliases and rewrite rules now apply when translating RailsBaseURI into
+physical path. Resolved paths are cached.
+2) Current behaviour remains: DocumentRoot+RailsBaseURI works also
+3) If RailsBaseURI or RackBaseURI has second argument then this second argument
+is used as physical path to rails public directory. This eliminates the need
+for extra lookup using Apache subrequest and the overhead caused by it.
+
+diff -wur ext/apache2/Configuration.cpp ext/apache2/Configuration.cpp
+--- ext/apache2/Configuration.cpp	2008-08-09 15:19:15.000000000 +0300
++++ ext/apache2/Configuration.cpp	2008-09-23 22:06:15.000000000 +0300
+@@ -75,11 +75,11 @@
+ 	DirConfig *add = (DirConfig *) addv;
+ 	
+ 	config->railsBaseURIs = base->railsBaseURIs;
+-	for (set<string>::const_iterator it(add->railsBaseURIs.begin()); it != add->railsBaseURIs.end(); it++) {
++	for (set<BaseURIConfig*>::const_iterator it(add->railsBaseURIs.begin()); it != add->railsBaseURIs.end(); it++) {
+ 		config->railsBaseURIs.insert(*it);
+ 	}
+ 	config->rackBaseURIs = base->rackBaseURIs;
+-	for (set<string>::const_iterator it(add->rackBaseURIs.begin()); it != add->rackBaseURIs.end(); it++) {
++	for (set<BaseURIConfig*>::const_iterator it(add->rackBaseURIs.begin()); it != add->rackBaseURIs.end(); it++) {
+ 		config->rackBaseURIs.insert(*it);
+ 	}
+ 	
+@@ -275,18 +275,27 @@
+  *************************************************/
+ 
+ static const char *
+-cmd_rails_base_uri(cmd_parms *cmd, void *pcfg, const char *arg) {
++cmd_rails_base_uri(cmd_parms *cmd, void *pcfg, const char *arg, const char *arg2) {
+ 	DirConfig *config = (DirConfig *) pcfg;
++	BaseURIConfig *bConfig = new BaseURIConfig;
+ 	if (strlen(arg) == 0) {
+ 		return "RailsBaseURI may not be set to the empty string";
+ 	} else if (arg[0] != '/') {
+ 		return "RailsBaseURI must start with a slash (/)";
+ 	} else if (strlen(arg) > 1 && arg[strlen(arg) - 1] == '/') {
+ 		return "RailsBaseURI must not end with a slash (/)";
+-	} else {
+-		config->railsBaseURIs.insert(arg);
+-		return NULL;
+ 	}
++
++	apr_pool_cleanup_register(cmd->pool, bConfig, destroy_config_struct<BaseURIConfig>, apr_pool_cleanup_null);
++
++	bConfig->baseURI = arg;
++
++	if (arg2) {
++	    bConfig->publicDirectory = arg2;
++	}
++
++	config->railsBaseURIs.insert(bConfig);
++	return NULL;
+ }
+ 
+ static const char *
+@@ -321,18 +331,26 @@
+  *************************************************/
+ 
+ static const char *
+-cmd_rack_base_uri(cmd_parms *cmd, void *pcfg, const char *arg) {
++cmd_rack_base_uri(cmd_parms *cmd, void *pcfg, const char *arg, const char *arg2) {
+ 	DirConfig *config = (DirConfig *) pcfg;
++	BaseURIConfig *bConfig = new BaseURIConfig;
+ 	if (strlen(arg) == 0) {
+ 		return "RackBaseURI may not be set to the empty string";
+ 	} else if (arg[0] != '/') {
+ 		return "RackBaseURI must start with a slash (/)";
+ 	} else if (strlen(arg) > 1 && arg[strlen(arg) - 1] == '/') {
+ 		return "RackBaseURI must not end with a slash (/)";
+-	} else {
+-		config->rackBaseURIs.insert(arg);
+-		return NULL;
+ 	}
++
++	apr_pool_cleanup_register(cmd->pool, bConfig, destroy_config_struct<BaseURIConfig>, apr_pool_cleanup_null);
++
++	bConfig->baseURI = arg;
++
++	if (arg2)  {
++		bConfig->publicDirectory = arg2;
++	}
++	config->rackBaseURIs.insert(bConfig);
++ 	return NULL;
+ }
+ 
+ static const char *
+@@ -414,7 +433,7 @@
+ 		"The user that Rails/Rack applications must run as when user switching fails or is disabled."),
+ 
+ 	// Rails-specific settings.
+-	AP_INIT_TAKE1("RailsBaseURI",
++	AP_INIT_TAKE12("RailsBaseURI",
+ 		(Take1Func) cmd_rails_base_uri,
+ 		NULL,
+ 		RSRC_CONF,
+@@ -441,7 +460,7 @@
+ 		"The spawn method to use."),
+ 	
+ 	// Rack-specific settings.
+-	AP_INIT_TAKE1("RackBaseURI",
++	AP_INIT_TAKE12("RackBaseURI",
+ 		(Take1Func) cmd_rack_base_uri,
+ 		NULL,
+ 		RSRC_CONF,
+diff -wur ext/apache2/Configuration.h ext/apache2/Configuration.h
+--- ext/apache2/Configuration.h	2008-08-09 15:19:33.000000000 +0300
++++ ext/apache2/Configuration.h	2008-09-23 22:06:15.000000000 +0300
+@@ -41,20 +41,25 @@
+ 	
+ 		using namespace std;
+ 		
++		struct BaseURIConfig {
++			std::string baseURI;
++			std::string publicDirectory;
++		};
++
+ 		/**
+ 		 * Per-directory configuration information.
+ 		 *
+ 		 * Use the getter methods to query information, because those will return
+ 		 * the default value if the value is not specified.
+ 		 */
+ 		struct DirConfig {
+ 			enum Threeway { ENABLED, DISABLED, UNSET };
+ 			enum SpawnMethod { SM_UNSET, SM_SMART, SM_SMART_LV2, SM_CONSERVATIVE };
+ 			
+ 			Threeway enabled;
+ 			
+-			std::set<std::string> railsBaseURIs;
+-			std::set<std::string> rackBaseURIs;
++			std::set<BaseURIConfig*> railsBaseURIs;
++			std::set<BaseURIConfig*> rackBaseURIs;
+ 			
+ 			/** Whether to autodetect Rails applications. */
+ 			Threeway autoDetectRails;
+diff -wur ext/apache2/DirectoryMapper.h ext/apache2/DirectoryMapper.h
+--- ext/apache2/DirectoryMapper.h	2008-08-09 15:19:15.000000000 +0300
++++ ext/apache2/DirectoryMapper.h	2008-09-23 22:13:36.000000000 +0300
+@@ -87,6 +87,7 @@
+ 	request_rec *r;
+ 	bool baseURIKnown;
+ 	const char *baseURI;
++	BaseURIConfig *bConfig;
+ 	ApplicationType appType;
+ 	
+ 	inline bool shouldAutoDetectRails() {
+@@ -114,6 +115,7 @@
+ 		appType = NONE;
+ 		baseURIKnown = false;
+ 		baseURI = NULL;
++		bConfig = NULL;
+ 	}
+ 	
+ 	/**
+@@ -136,7 +138,7 @@
+ 			return baseURI;
+ 		}
+ 		
+-		set<string>::const_iterator it;
++		set<BaseURIConfig *>::const_iterator it;
+ 		const char *uri = r->uri;
+ 		size_t uri_len = strlen(uri);
+ 		
+@@ -146,7 +148,8 @@
+ 		}
+ 		
+ 		for (it = config->railsBaseURIs.begin(); it != config->railsBaseURIs.end(); it++) {
+-			const string &base(*it);
++			BaseURIConfig * bc = (*it);
++			const string base = bc->baseURI;
+ 			if (  base == "/"
+ 			 || ( uri_len == base.size() && memcmp(uri, base.c_str(), uri_len) == 0 )
+ 			 || ( uri_len  > base.size() && memcmp(uri, base.c_str(), base.size()) == 0
+@@ -155,13 +158,15 @@
+ 				baseURIKnown = true;
+ 				baseURI = base.c_str();
+ 				appType = RAILS;
++				this->bConfig = bc;
+ 				return baseURI;
+ 			}
+ 		}
+ 		
+ 		UPDATE_TRACE_POINT();
+ 		for (it = config->rackBaseURIs.begin(); it != config->rackBaseURIs.end(); it++) {
+-			const string &base(*it);
++			BaseURIConfig * bc = (*it);
++			const string base = bc->baseURI;
+ 			if (  base == "/"
+ 			 || ( uri_len == base.size() && memcmp(uri, base.c_str(), uri_len) == 0 )
+ 			 || ( uri_len  > base.size() && memcmp(uri, base.c_str(), base.size()) == 0
+@@ -169,6 +174,7 @@
+ 				baseURIKnown = true;
+ 				baseURI = base.c_str();
+ 				appType = RACK;
++				this->bConfig = bc;
+ 				return baseURI;
+ 			}
+ 		}
+@@ -213,26 +219,14 @@
+ 			return "";
+ 		}
+ 		
+-		const char *docRoot = ap_document_root(r);
+-		size_t len = strlen(docRoot);
+-		if (len > 0) {
+-			string path;
+-			if (docRoot[len - 1] == '/') {
+-				path.assign(docRoot, len - 1);
+-			} else {
+-				path.assign(docRoot, len);
+-			}
+-			if (strcmp(baseURI, "/") != 0) {
+-				/* Application is deployed in a sub-URI.
+-				 * This is probably a symlink, so let's resolve it.
+-				 */
+-				path.append(baseURI);
+-				path = resolveSymlink(path);
+-			}
+-			return path;
+-		} else {
+-			return "";
++		if (this->bConfig->publicDirectory.empty ()) {
++			request_rec *sub_req;
++			sub_req = ap_sub_req_lookup_uri(baseURI, r, NULL);
++
++			this->bConfig->publicDirectory = resolveSymlink(sub_req->filename);
+ 		}
++
++		return this->bConfig->publicDirectory;
+ 	}
+ 	
+ 	/**
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/apache-mod_rails/apache-mod_rails.spec?r1=1.6&r2=1.7&f=u



More information about the pld-cvs-commit mailing list