Cherrypy setup questions

B

Brian Blais

Hello,

I'd like to start trying out some cherrypy apps, but I've been having some setup
problems. I think I need some bone-head simple example to clear my understanding. :)

I'm on a system running Apache, that I don't have root access to. I will be
publishing the html/image/python files in a directory off of my current web page, and
running the app as a user on the system. I'd like to be able to specify the base url
for the app, especially if I have more than one app. I've read the docs, but am
getting confused with the config file information, and exactly how to set it up. I'm
using CherryPy 3.0.1, the latest I know.

Some questions I have:
1) can I configure cherrypy to look at requests only off a base url, like:

http://www.provider.com:8080/~myusername/apps

and ignore all other requests below that url, like

http://www.provider.com:8080/~someotherguy

or

http://www.provider.com:8080/~myusername


2) If you run (as in Unix):

cd app1
python mycherrypyapp1.py &

cd ../app2
python mycherrypyapp2.py &


Does this start 2 cherrypy servers, trying to both fight for port 8080, or is there
only one, and the two apps share it?


Are there any examples that show such a setup? I didn't see a CherryPy mailing list,
so I'm posting here, but if there is somewhere else better I'd be glad to know!




thanks,


Brian Blais
 
F

fumanchu

I'd like to start trying out some cherrypy apps, but I've
been having some setup problems. I think I need some
bone-head simple example to clear my understanding. :)

I'm on a system running Apache, that I don't have root
access to. I will be publishing the html/image/python
files in a directory off of my current web page, and
running the app as a user on the system. I'd like to be
able to specify the base url for the app, especially if
I have more than one app. I've read the docs, but am
getting confused with the config file information, and
exactly how to set it up. I'm using CherryPy 3.0.1,
the latest I know.

Some questions I have:
1) can I configure cherrypy to look at requests only
off a base url, like:

http://www.provider.com:8080/~myusername/apps

Yes, you can. Assuming you're using the "cherrypy.quickstart"
function, supply the "base url" in the "script_name" argument; for
example:

sn = 'http://www.provider.com:8080/~myusername/apps'
cherrypy.quickstart(Root(), sn, config)

If you're using cherrypy.tree.mount instead of quickstart, it takes a
similar argument.
2) If you run (as in Unix):

cd app1
python mycherrypyapp1.py &

cd ../app2
python mycherrypyapp2.py &

Does this start 2 cherrypy servers, trying to both fight
for port 8080, or is there only one, and the two apps share it?

This will almost certainly start two cherrypy servers. You can run one
on a different port via a "server.socket_port" config entry if you
like. If you want them both to run on the same port but different
"base urls", you should write a small "mysite.py" which mounts them as
desired; for example:

# mysite.py

import cherrypy
import app1, app2

cherrypy.tree.mount(app1.root, "/app1")
cherrypy.tree.mount(app2.root, "/app2")
cherrypy.server.quickstart()
cherrypy.engine.start()
cherrypy.engine.block()

I didn't see a CherryPy mailing list, so I'm posting here,
but if there is somewhere else better I'd be glad to know!

There is a cherrypy-users mailing list, and I'm CC'ing it so you can
reply there if you like. :)

Hope that helps!


Robert Brewer
System Architect
Amor Ministries
(e-mail address removed)
 
B

Brian Blais

fumanchu said:
>
> Yes, you can. Assuming you're using the "cherrypy.quickstart"
> function, supply the "base url" in the "script_name" argument; for
> example:
>
> sn = 'http://www.provider.com:8080/~myusername/apps'
> cherrypy.quickstart(Root(), sn, config)
>

Thanks for your reply, but for some reason it is not working as stated. I'm probably
missing something.

import cherrypy
from cherrypy import expose

class HelloWorld:


@expose
def hello(self,*another):
if not another:
return("hello")
else:
return("hello: %s" % str(another))


@expose
def index(self):
return "Hello world!"


# at first I tried
cherrypy.quickstart(HelloWorld())

which works, off of http://localhost:8080/

and http://localhost:8080/hello
and http://localhost:8080/hello/more_stuff

works fine.

# so then I tried each of these (separately, of course)...
baseurl='http://localhost:8080/~bblais/apps'
cherrypy.quickstart(HelloWorld(),baseurl)

# then
baseurl='http://localhost:8080/bblais/apps'
cherrypy.quickstart(HelloWorld(),baseurl)


# finally,
root=HelloWorld()
cherrypy.tree.mount(root,'apps/')
cherrypy.server.quickstart()
cherrypy.engine.start()
cherrypy.engine.block()


In each case, there is similar behavior. The script runs fine, and the Cherrypy
gives the usual startup message, but nothing is printed when I access the above urls.
I know something is wrong, because cherrypy doesn't even log the events. Without
the baseurl specified, I get things like:

127.0.0.1 - - [23/May/2007:08:56:24] "GET /hello HTTP/1.1" 200 5 "" ""

whenever I access the site. Specifying the baseurl, nothing.

Two more pieces of info. When I start, I usually get:

The Application mounted at '' has an empty config.

which is solved by adding a config='hello.conf', where hello.conf is:

[global]
server.socket_host = "localhost"
server.socket_port = 8080
server.thread_pool = 10


even with that, I when I specify a baseurl (say, apps), I get:

The Application mounted at 'apps' has an empty config.


Is it missing something, that it can't make a default choice on?



thanks for your help!


Brian Blais
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,990
Messages
2,570,211
Members
46,796
Latest member
SteveBreed

Latest Threads

Top