On Thu, Jan 13, 2011 at 4:17 PM, Janez Štupar <[email protected]> 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 <[email protected]>wrote: > >> did you try to add: >> >> { >> >> "from": ":db", >> "to": "../.." >> } >> >> ? >> >> - benoît >> >> On Mon, Jan 10, 2011 at 6:21 PM, Janez Štupar <[email protected]> >> 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
