Live data from Hacker News

Myths About CGI Scalability

z505.com

1–10 of 57 posts

Re: Myths About CGI Scalability

#3
I really like the PHP approach of "one url, one file" by letting Apache handle the routing. I love to build a whole application by just putting a bunch of php files into a directory.

And I hate that in a typical Python+Django application, I have to restart the application to see changes I make.

But apart from that, Python is the nicer language. So I would like to do more web dev in Python. Most Python devs get red faces when you tell them that the PHP approach has benefits and you would prefer to go that route though.

What is a good Apache virtualhost entry to accomplish the typical PHP approach but for Python? How do I tell Apache "My application is in /var/www/myapplication/, execute all python files in there"? Are there any arguments to not do this in production?

Re: Myths About CGI Scalability

#4
post #2

There's no publication date and archive.org's earliest snapshot is 2007. For which decade is this advice relevant?

The site's favicon has:

  Last-Modified: Sun, 04 May 2008 00:32:10 GMT
Which means very little, they may have added it long after this page was written.

As this page is rendered with CGI, we don't get a Last-Modified for it. That's a CGI disadvantage :p

EDIT: Oh, http://z505.com/cgi-bin/qkcont/qkcont.cgi?p=PasWiki%20Direct... says "Info on this site dates back to 2004 and may be outdated."! 2004 or earlier then.

Re: Myths About CGI Scalability

#5
post #2

There's no publication date and archive.org's earliest snapshot is 2007. For which decade is this advice relevant?

The article is an explanation (defense?) of the author's library Powtils[0], which was created in February 2004[1].

Even in 2004 I think it would have been extremely unusual to write web applications in Pascal and serve them via CGI. The first edition of Lazarus was released in 2001, and the name gives a hint about Pascal's popularity at the time. From what I remember of that era, PHP was dominant and FastCGI was a popular way to hook it up to non-Apache webservers such as IIS.

[0] http://z505.com/powtils/idx.shtml

[1] https://web.archive.org/web/20040604122859/http://www.psp.fu...

Re: Myths About CGI Scalability

#6
post #3

I really like the PHP approach of "one url, one file" by letting Apache handle the routing. I love to build a whole application by just putting a bunch of php files into a directory. And I hate that in a typical Python+Django application, I have to restart the application to see changes I make. But apart from that, Python is the nicer language. So I would like to do more web dev in Python. Most Python devs get red fa…

Perhaps give mod_python a look. Tried and tested but I wouldn't want to write an application like that in 2022 when I could use Flask or Fast API.

Re: Myths About CGI Scalability

#7
post #3

I really like the PHP approach of "one url, one file" by letting Apache handle the routing. I love to build a whole application by just putting a bunch of php files into a directory. And I hate that in a typical Python+Django application, I have to restart the application to see changes I make. But apart from that, Python is the nicer language. So I would like to do more web dev in Python. Most Python devs get red fa…

It's not perfect yet, but Reloadium [0] enables hot reloading of Django views.

As for running python scripts like PHP, something like this should work:

    Options +ExecCGI    
    AddHandler cgi-script .py      
Just add a Python shebang at the top of the file and it should execute. If I'm not mistaken, you'll have to print headers and then content, so you'll probably want a lib to make that easier (I don't know any, but surely they exist).

[0] https://reloadium.io/features/django

Re: Myths About CGI Scalability

#8
post #3

I really like the PHP approach of "one url, one file" by letting Apache handle the routing. I love to build a whole application by just putting a bunch of php files into a directory. And I hate that in a typical Python+Django application, I have to restart the application to see changes I make. But apart from that, Python is the nicer language. So I would like to do more web dev in Python. Most Python devs get red fa…

Indeed, but:

- when declaring routing in code, it's harder to shoot yourself in the foot. So many php sites expose what they should not, and .httaccess is rarely crafted correctly

- renaming files don't change your website

- coding locally doesn't require apache if your tooling don't need it for routing. No need for stuff like EasyPhp

- python dev servers automatically reload for you on changes anyway

- declaring routes and parsing them at one place to get url id and slug is less duplication

- declaring url yourself mean you can use the language typing system for their checking too (see fastapi)

- I rarely need an entire file for one route endpoint, making 10 files for 10 enpoints that could fit in one is overkill

- wsgi servers like gunicorn will hapilly reload the workers when it receives SIGHUP in prod. No need to restart the master process manually.

- restarting a process every time mean you can't benefit much from nice python features like lru_cache, process/thread pools, connection pools, etc

- python is slow to start, cgi takes a toll

- it's easier to control the number of max workers that run an any given time

Honestly, even when coding in PHP I will use phpfpm (which is one long running process like python) and frameworks like laravel (in which you declare your routing).

I understand the desire for simplicity, and the one-file/one-route declaration is easy to get into. But if I want simple, I do a static website with a bit of client side JS, not need for a backend.

When I do need a backend, I much prefer long running workers and explicit route declaration.

Re: Myths About CGI Scalability

#9
post #2

There's no publication date and archive.org's earliest snapshot is 2007. For which decade is this advice relevant?

Since it's talking about Perl CGI websites, the decade for which it's relevant was the 1990s.

Phil Greenspun's book Database Backed Websites was published in 1997, and its coverage of CGI already started seeming rather quaint over the next few years as better approaches took over.

Re: Myths About CGI Scalability

#10
post #3

I really like the PHP approach of "one url, one file" by letting Apache handle the routing. I love to build a whole application by just putting a bunch of php files into a directory. And I hate that in a typical Python+Django application, I have to restart the application to see changes I make. But apart from that, Python is the nicer language. So I would like to do more web dev in Python. Most Python devs get red fa…

> "one url, one file" by letting Apache handle the routing

Source of many issues when someone forgets the "include auth.php" equivalent in that one specific file. (not theoretical, this happened so many times)

> I have to restart the application to see changes I make.

https://adamj.eu/tech/2021/12/16/introducing-django-browser-...

Post reply on HN