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