World: r3wp
[!Cheyenne] Discussions about the Cheyenne Web Server
older newer | first last |
Graham 11-Sep-2009 [5659] | in the webapp config timeout time! |
Janko 11-Sep-2009 [5660] | thanks |
Pekr 11-Sep-2009 [5661x3] | What technique does cheyenne use in regards to spawning of new processes? I mean - it either uses 'launch or some form of 'call. I wonder, what is the IPC (inter-process communication) strategy. E.g. I have 10 requests I want to handle simultaneously, I spawn 10 processes. How do I pass TCP port to them? Or does it work some different way? |
I want to try to plug R3 into Cheyenne to test CGI under Windows. I can't understand, how Cheyenne handles CGI though. I can find handlers/CGI, where it does some strange stuff. First and foremost - the shebang line is ignored, yet CGU it works - you can entirely delete it. I can get shebang section evaluated only if I delete REBOL header. This is confusing for me ... | |
Does Cheyenne call somehow internally default installed REBOL interpreter on your machine? Or is CGI handled by one of spawned processes by the interpreted instance, running the CGI? I simply want it to order to use my own interpreter :-) OK, will try with Apache, that will be clearer ... | |
Dockimbel 11-Sep-2009 [5664x2] | Janko: look in the Cheyenne's ChangeLog file, that's where I document new stuff. Direct link: http://code.google.com/p/cheyenne-server/source/browse/trunk/Cheyenne/changelog.txt |
Spawning new process: It uses CALL to simulate LAUNCH because LAUNCH native wasn't supported by all REBOL kernels IIRC. IPC is done using TCP ports : client <=TCP:80=> httpd <=TCP:980x=>worker-process | |
Janko 11-Sep-2009 [5666] | Thanks Doc |
Dockimbel 11-Sep-2009 [5667] | If you want to handle 10 requests at the same time, Cheyenne will proxify your requests to background processes (taken from the existing preforked pool, additional processes are started if the pool is not enough). |
Pekr 11-Sep-2009 [5668] | Do you use any specific dialect for IPC, or just some basic parsing methods? Those questions are just theoretical. Now I am more interested into how do I let Cheyenne use R3 for CGI process, instead of R2, just to do some testing? |
Janko 11-Sep-2009 [5669] | btw.. cheyenne already does by itself what you need frontend nginx + multiple instances of mongrel / cherrypy (TurboGears) / servers in the background |
Dockimbel 11-Sep-2009 [5670] | CGI handling: two different strategies are applied : - if the target script is a REBOL script, the process is already a REBOL session, so no need to start a new one (and avoid the startup cost, so you get FastCGI speed). Shebang line is ignored in that case. - if the target script is not a REBOL script (no REBOL header), classic approach is used: setting of environnemental variables, CALLing executable from shebang line, sending input, catching output,... |
Pekr 11-Sep-2009 [5671] | so, my strategy is - use the sheband line, remove REBOL header, right? |
Dockimbel 11-Sep-2009 [5672x2] | To support R3, you have to either hack CGI.r source code to force REBOL script to use the general strategy (simple to do, but probably poor performances) or implement a mod-R3 extension to setup a custom R3 persistent server (more work but faster result). |
if you remove REBOL header, will R3 accept to run the script? | |
Pekr 11-Sep-2009 [5674] | hmm, but then I get - ** Syntax Error: Script is missing a REBOL header ** Near: do/args script system/script/args |
Dockimbel 11-Sep-2009 [5675] | :-) |
Pekr 11-Sep-2009 [5676x2] | that is - for R2. I changed REBOL [] to REEBOL in order to get sheband line active. The strategy could be simplified, but the 'either code would have to be reordered ... |
Simply put - if sheband line is there, us it, easy as that. I don't understand why normal REBOL header takes precedence ... putting sheband line into action is problematic, if you somehow need to use rebol script, without REBOL header ... | |
Dockimbel 11-Sep-2009 [5678] | Hacking CGI.r seems easier. Just patch it to avoid REBOL header detection like this: script: none ; <= add this line to force classic CGI either all [ string? script not empty? script ][ |
Pekr 11-Sep-2009 [5679] | yes ... that is patch for incorrect logic, but easy one :-) |
Dockimbel 11-Sep-2009 [5680x2] | I wanted to make it easier for CGI coders to switch from Cheyenne<=>Apache. Using your solution would force users to add/remove the shebang line each time you change server (like debugging locally on Cheyenne and putting in production on Apache). |
Always honoring shebang line would result in poor performance of REBOL CGI scripts under Cheyenne. | |
Pekr 11-Sep-2009 [5682] | How is that? Under Apache, I do have to have both - shebang line plus REBOL header .... Yes, I understand why the precedence was set - because of fast-cgi mode precedence ... |
Dockimbel 11-Sep-2009 [5683] | Right, I thought that making REBOL CGI fast under Cheyenne was the least expected from a REBOL web server. |
Pekr 11-Sep-2009 [5684x2] | Yes, normally yes, because you don't normally care about using different interpreter for the task given. It could as well be easily solved by some setting/switch - use normal CGI, vs FastCGI .... |
for all those years, I used normal CGI on my linux. I found out, that even PHP on my server, runs in normal CGI mode :-) But being faster is always handy ... | |
Dockimbel 11-Sep-2009 [5686] | I chosed the simplier and most efficient solution for the user. Having to support REBOL scripts using same header than R2 but with a R2-non-compatible kernel was not something planned. |
Pekr 11-Sep-2009 [5687x2] | interesting that we've got get-env, but not set-env function in REBOL. Either R2 nor R3 do have it ... |
btw - it seems that Carl's beta plan might be a bit larger, if he is about to accept many additional user requests. There are still important things missing, and without them it imo does not make sense to call R3 a beta ... | |
Dockimbel 11-Sep-2009 [5689x2] | Part of REBOL oddities. REBOL only needs get-env for supporting CGI mode. |
In my book "beta stage" is reached when the product is (mostly) feature-complete and all the known bugs are fixed. | |
Pekr 11-Sep-2009 [5691] | re bugs - I am more forgiving - look at Mozilla or KDE - they would never release, if all bugs were supposed being fixed :-) Re bug-fixing, we are imo OK last 6-8 months - 100 tickets a month is not all that bad. But missing stuff ppl mentioned in reaction to blog, I really wonder how Carl decides about it .... |
Dockimbel 11-Sep-2009 [5692] | Answering in !REBOL3 |
Henrik 14-Sep-2009 [5693] | note to self: Always start Cheyenne with sudo... |
btiffin 14-Sep-2009 [5694] | Or ... better yet, use NAT to reroute port 80 to something above 1024 and run Cheyenne from user space listening on the non-priv'ed port?? Safer (I think) if anyone ever assumes control of your server internals. Or do you need root powers for something other than listening on port 80? |
Henrik 14-Sep-2009 [5695] | Hmm... generated VID Extension Kit docs on the fly for website in 0.009 seconds. Looks like there are things to optimize. :-) |
sqlab 15-Sep-2009 [5696] | I used response/set-status/msg to get appropriate error messages, but I always got just the standard message. |
Dockimbel 15-Sep-2009 [5697x2] | It works here : <%response/set-status/msg 201 "Test"%> 15/9-08:46:50.9-[HTTPd] Response=> HTTP/1.1 201 Test Server: Cheyenne/0.9.20 <%response/set-status/msg 404 "Test"%> 15/9-08:48:28.118-[HTTPd] Response=> HTTP/1.1 404 Test Server: Cheyenne/0.9.20 |
Do you have a short example script showing the issue? | |
sqlab 15-Sep-2009 [5699] | This is the relevant part in a failure block <% .. [ response/reset response/set-header 'Content-Type "text/html" response/set-status/msg 404 "Person not found" response/end ] %> |
Dockimbel 15-Sep-2009 [5700x2] | Thanks, testing that. |
I get the following response, looks OK : 15/9-11:07:53.546-[HTTPd] Response=> HTTP/1.1 404 Person not found Server: Cheyenne/0.9.20 Date: Tue, 15 Sep 2009 09:07:53 GMT Content-Length: 53 Content-Type: text/html Connection: Keep-Alive | |
sqlab 15-Sep-2009 [5702x3] | strange, neither in a browser nor im Rebol with trace/net I see that. |
it seems they all rewrite the answer they present to the user.( | |
by the way, what's the status of ssl? | |
Janko 15-Sep-2009 [5705] | What is the best way to make domain.com to www.domain.com redirection in Cheyenne .. (seo guy advised me that).. in apache you use mod_rewrite: RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.site-assitant\.com$ [NC] RewriteRule ^.*$ http://www.site-assitant\.com%{REQUEST_URI} [R=301,L] |
Graham 15-Sep-2009 [5706x3] | are you sure it's not a cached version you're seeing? |
i.e put some traces in the failure block | |
No SSL unless you use stunnel or similar | |
older newer | first last |