couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benoit Chesneau <bchesn...@gmail.com>
Subject Re: Strange issue with VHosts and rewrites...
Date Thu, 13 Jan 2011 15:53:29 GMT
On Thu, Jan 13, 2011 at 4:17 PM, Janez Štupar <janez.stupar@gmail.com> wrote:
> 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/*"
>> >   }
>> >
>>
>
So using 2 rewrites rules work right ? (That what I suggested). For
content-type This is something expected i think. Will re-read this
separate issue later. Headers are not rewritten anyway.

- benoît

Mime
View raw message