incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Janez Štupar <janez.stu...@gmail.com>
Subject Re: Strange issue with VHosts and rewrites...
Date Thu, 13 Jan 2011 15:17:53 GMT
Benoît, I did what you proposed and it behaves exactly as before

Ok i did some testing and this is what I figured out.

This is my testing setup: I created a new database (test) that doesn't use
any VHost rules.

Inside it I created a design document that only has rewrites field. I will
present test results exactly as per configuration I used.

I always sent the same document contained in file "example" - namely:
{
    "type": "comment"
}

Below are the test results:
----------------------------------------------------------------------------------------------------
## Test 1:
# rewrites config:
[
   {
       "to": "../..",
       "from": ":db"
   }
]

# Executed command 1.1:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test  http://localhost:5984/test/
{"ok":true,"id":"ce8b504d63666c9257cc07537c00aa70","rev":"1-505a221d0aef5d664f29d6afdae01293"}

# Comment: expected result - everything is fine.



# Executed command 1.2:
$ curl -X PUT  -d @example -H "Content-type:application/json"
http://localhost:5984/test/_design/test/_rewrite/test/randomid324324
{"error":"not_found","reason":"missing"}

# Comment: result expected since there is no ID parameter passed through -
due to the rewrite rule

#LOG:
[Mon, 10 Jan 2011 21:42:17 GMT] [debug] [<0.8844.3>] 'PUT'
/test/_design/test/_rewrite/test/randomid324324 {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 21:42:17 GMT] [debug] [<0.8844.3>] OAuth Params: []

[Mon, 10 Jan 2011 21:42:17 GMT] [debug] [<0.8844.3>] Minor error in HTTP
request: not_found

[Mon, 10 Jan 2011 21:42:17 GMT] [debug] [<0.8844.3>] Stacktrace:
[{couch_httpd_rewrite,handle_rewrite_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 21:42:17 GMT] [info] [<0.8844.3>] 127.0.0.1 - - 'PUT'
/test/_design/test/_rewrite/test/randomid324324 404

[Mon, 10 Jan 2011 21:42:17 GMT] [debug] [<0.8844.3>] httpd 404 error
response:
 {"error":"not_found","reason":"missing"}




# Executed command 1.3:
$curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test
http://localhost:5984/test/_design/test/_rewrite/test/
{"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

# Comment: Rewrite is wrong - also peculiar it won't take application/json
content type.

# LOG:
[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] 'POST'
/test/_design/test/_rewrite/test/ {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] OAuth Params: []

[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] rewrite to
"/test/_design/..?db=test"


[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] 'POST'
/test/_design/..?db=test {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] OAuth Params:
[{"db","test"}]

[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] Minor error in HTTP
request: {bad_ctype,
                                 "Content-Type must be multipart/form-data"}

[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] Stacktrace:
[{couch_httpd,validate_ctype,2},
             {couch_httpd_db,db_doc_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 21:51:55 GMT] [info] [<0.9453.3>] 127.0.0.1 - - 'POST'
/test/_design/..?db=test 415

[Mon, 10 Jan 2011 21:51:55 GMT] [debug] [<0.9453.3>] httpd 415 error
response:
 {"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}



# Executed command 1.4:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test  http://localhost:5984/test/randomid32420
{"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

# Comment: I did this one just because - and I noticed that when you post
with and ID - it wont accept JSON content type

# LOG:
[Mon, 10 Jan 2011 21:54:23 GMT] [debug] [<0.9490.3>] 'POST'
/test/randomid32420 {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 21:54:23 GMT] [debug] [<0.9490.3>] OAuth Params: []

[Mon, 10 Jan 2011 21:54:23 GMT] [debug] [<0.9490.3>] Minor error in HTTP
request: {bad_ctype,
                                 "Content-Type must be multipart/form-data"}

[Mon, 10 Jan 2011 21:54:23 GMT] [debug] [<0.9490.3>] Stacktrace:
[{couch_httpd,validate_ctype,2},
             {couch_httpd_db,db_doc_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 21:54:23 GMT] [info] [<0.9490.3>] 127.0.0.1 - - 'POST'
/test/randomid32420 415

[Mon, 10 Jan 2011 21:54:23 GMT] [debug] [<0.9490.3>] httpd 415 error
response:
 {"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}



----------------------------------------------------------------------------------------------------


## Test 2:

# Rewrites config:
[
   {
       "to": "../../*",
       "from": ":db/*"
   }
]

# Executed command 2.1:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test  http://localhost:5984/test/
{"ok":true,"id":"ce8b504d63666c9257cc07537c00af99","rev":"1-505a221d0aef5d664f29d6afdae01293"}

# Comment: OK, everything is fine



#Executed command 2.2:
$ curl -X PUT  -d @example -H "Content-type:application/json"
http://localhost:5984/test/_design/test/_rewrite/test/randomid3125
{"ok":true,"id":"randomid3125","rev":"1-505a221d0aef5d664f29d6afdae01293"}

# Comment: OK, everything is fine - since now rewrite rule appropriately
handles the ID.


#Executed command 2.3:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test
http://localhost:5984/test/_design/test/_rewrite/test/
{"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

# Comment: Routing and content type are wrong (routing in PUT request -
command 2.2 was done right!)

# LOG:
[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] 'POST'
/test/_design/test/_rewrite/test/ {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] OAuth Params: []

[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] rewrite to
"/test/_design/..?db=test"


[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] 'POST'
/test/_design/..?db=test {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] OAuth Params:
[{"db","test"}]

[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] Minor error in HTTP
request: {bad_ctype,
                                 "Content-Type must be multipart/form-data"}

[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] Stacktrace:
[{couch_httpd,validate_ctype,2},
             {couch_httpd_db,db_doc_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 22:06:17 GMT] [info] [<0.10262.3>] 127.0.0.1 - - 'POST'
/test/_design/..?db=test 415

[Mon, 10 Jan 2011 22:06:17 GMT] [debug] [<0.10262.3>] httpd 415 error
response:
 {"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}


#Executed command 2.4:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test  http://localhost:5984/test/randomid32843
{"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

#Comment: No routing information in log, got Cotent type error.

#LOG:
[Mon, 10 Jan 2011 22:11:53 GMT] [debug] [<0.10377.3>] 'POST'
/test/randomid32843 {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 22:11:53 GMT] [debug] [<0.10377.3>] OAuth Params: []

[Mon, 10 Jan 2011 22:11:53 GMT] [debug] [<0.10377.3>] Minor error in HTTP
request: {bad_ctype,
                                 "Content-Type must be multipart/form-data"}

[Mon, 10 Jan 2011 22:11:53 GMT] [debug] [<0.10377.3>] Stacktrace:
[{couch_httpd,validate_ctype,2},
             {couch_httpd_db,db_doc_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 22:11:53 GMT] [info] [<0.10377.3>] 127.0.0.1 - - 'POST'
/test/randomid32843 415

[Mon, 10 Jan 2011 22:11:53 GMT] [debug] [<0.10377.3>] httpd 415 error
response:
 {"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

----------------------------------------------------------------------------------------------------


## Test 3:

# Rewrites config:
[
   {
       "to": "../../*",
       "from": ":db/*"
   },
   {
       "to": "../..",
       "from": ":db"
   }
]


# Executed command 3.1:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test  http://localhost:5984/test/
{"ok":true,"id":"ce8b504d63666c9257cc07537c00bbe3","rev":"1-505a221d0aef5d664f29d6afdae01293"}

# Comment: OK! works as expected



#Executed command 3.2:
$ curl -X PUT  -d @example -H "Content-type:application/json"
http://localhost:5984/test/_design/test/_rewrite/test/randomid43242
{"ok":true,"id":"randomid43242","rev":"1-505a221d0aef5d664f29d6afdae01293"}

# Comment: OK! works as expected


#Executed command 3.3:
$ curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test
http://localhost:5984/test/_design/test/_rewrite/test/
{"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

# Comment: Rewrite issue and content type issue

# LOG:
[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] 'POST'
/test/_design/test/_rewrite/test/ {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] OAuth Params: []

[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] rewrite to
"/test/_design/..?db=test"


[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] 'POST'
/test/_design/..?db=test {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] OAuth Params:
[{"db","test"}]

[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] Minor error in HTTP
request: {bad_ctype,
                                 "Content-Type must be multipart/form-data"}

[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] Stacktrace:
[{couch_httpd,validate_ctype,2},
             {couch_httpd_db,db_doc_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 22:19:55 GMT] [info] [<0.11199.3>] 127.0.0.1 - - 'POST'
/test/_design/..?db=test 415

[Mon, 10 Jan 2011 22:19:55 GMT] [debug] [<0.11199.3>] httpd 415 error
response:
 {"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}


#Executed command 3.4:
$  curl  -d @example -H "Content-type:application/json" -e
http://localhost:5984/test  http://localhost:5984/test/randomid432432
{"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}

#Comment: Obviously no rewrite issue, however content type problem is there

#LOG:
[Mon, 10 Jan 2011 22:21:24 GMT] [debug] [<0.11220.3>] 'POST'
/test/randomid432432 {1,1}
Headers: [{'Accept',"*/*"},
          {'Content-Length',"23"},
          {'Content-Type',"application/json"},
          {'Host',"localhost:5984"},
          {'Referer',"http://localhost:5984/test"},
          {'User-Agent',"curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0
OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18"}]

[Mon, 10 Jan 2011 22:21:24 GMT] [debug] [<0.11220.3>] OAuth Params: []

[Mon, 10 Jan 2011 22:21:24 GMT] [debug] [<0.11220.3>] Minor error in HTTP
request: {bad_ctype,
                                 "Content-Type must be multipart/form-data"}

[Mon, 10 Jan 2011 22:21:24 GMT] [debug] [<0.11220.3>] Stacktrace:
[{couch_httpd,validate_ctype,2},
             {couch_httpd_db,db_doc_req,3},
             {couch_httpd_db,do_db_req,2},
             {couch_httpd,handle_request_int,5},
             {mochiweb_http,headers,5},
             {proc_lib,init_p_do_apply,3}]

[Mon, 10 Jan 2011 22:21:24 GMT] [info] [<0.11220.3>] 127.0.0.1 - - 'POST'
/test/randomid432432 415

[Mon, 10 Jan 2011 22:21:24 GMT] [debug] [<0.11220.3>] httpd 415 error
response:
 {"error":"bad_content_type","reason":"Content-Type must be
multipart/form-data"}



Apparently these are two different issues.

First handling of rewrites for POST requests and the second is the problem
with Content types?

Also I would be extremely happy to find out what are more exact rules for
pattern matching? I have found this site (
http://caolanmcmahon.com/on_designs_undocumented.html) which provides some
answers. I have also read somewhere that rewriting is basically Erlang
pattern matching ... so should I read up more about the topic in Erlang
documentation?

There is also a question I have that wasn't answered anywhere - is it
possible for multiple rewrites to apply to single request? If so what is the
precedence? If not - what is the precedence in that case.

Thank you for any response.

Kind regards, -Janez

On Thu, Jan 13, 2011 at 8:21 AM, Benoit Chesneau <bchesneau@gmail.com>wrote:

> did you try to add:
>
> {
>
> "from": ":db",
> "to": "../.."
> }
>
> ?
>
> - benoît
>
> On Mon, Jan 10, 2011 at 6:21 PM, Janez Štupar <janez.stupar@gmail.com>
> wrote:
> > Here is the problem I'm currently dabbling around with Sofa (got it from
> > jchrisa's Github)... To this end I'm reverse engineering it and trying to
> > get it work in a following scenario:
> >
> > The database is hidden behind following VHost: sofa.mycouch  ->
> > /sofa/_design/sofa/_rewrite
> >
> > Since I wanted to improve the appearance of the URL's I also did some
> > modifications to the rewrites, my current configuration is as follows:
> >
> > [
> >   {
> >       "to": "_list/index/recent-posts",
> >       "from": "blog/",
> >       "query": {
> >           "limit": 10,
> >           "descending": true
> >       }
> >   },
> >   {
> >       "to": "_list/:listname/*",
> >       "from": "list/:listname/*",
> >       "query": {
> >           "limit": 10,
> >           "descending": true
> >       }
> >   },
> >   {
> >        "to" : "_show/:showname/*",
> >        "from" : "show/:showname/*"
> >   },
> >   {
> >         "to" : "_update/:updatename/*",
> >         "from" : "update/:updatename/*"
> >   },
> >   {
> >       "to": "_list/index/recent-posts",
> >       "from": "",
> >       "query": {
> >           "limit": 10,
> >           "descending": true
> >       }
> >   },
> >   {
> >       "to": "script/*",
> >       "from": "script/*"
> >   },
> >   {
> >       "to": "style/*",
> >       "from": "style/*"
> >   },
> >   {
> >       "to": "vendor/*",
> >       "from": "vendor/*"
> >   },
> >   {
> >    "to": "../../*",
> >    "from": ":db/*"
> >   }
> > ]
> >
> > The last problem I have left is that although everything works (I have
> > indeed done some modifications to the templates, pathing function, etc..
> > nothing relevant to this current issue IMHO).
> > *
> > Except* one thing doesn't work as expected ... that is posting comments.
> I
> > have kinda narrowed it down that when the browser sends a new blog post
> it
> > does PUT to address: '"/sofa/_design/sofa/_rewrite/sofa/spet-nov-post"'
> > (spet-nov-post is a _id - according to jquery.couch.js)
> >
> > While comment gets POST -ed to following URL:
> > '"/sofa/_design/sofa/_rewrite/sofa/"'
> >
> > what happens in the rewriter is following:
> >
> > 'PUT' /sofa/_design/sofa/_rewrite/sofa/spet-nov-post {1,1} -> 'PUT'
> > /sofa/spet-nov-post?db=sofa {1,1}
> > 'POST' /sofa/_design/sofa/_rewrite/sofa/ {1,1}  -> 'POST'
> > /sofa/_design/..?db=sofa {1,1}
> >
> > I blame the following rewrite rule:
> >   {
> >    "to": "../../*",
> >    "from": ":db/*"
> >   }
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message