Well, I solved it somehow. If I import web2py.gluon.main and use web2py.gluon.main.wsgibase, "exec ccode in environment" will reimport web2py and web2py.gluon.globals.current will be created within the environment each time. If I import gluon.main and use gluon.main.wsgibase, "current" will be reused from outside the environment and the application works.
However, during debugging with the built-in Rocket server, it seems like only one gluon.globals.current is used for all the threads. When a breakpoint is set in Auth.__init__(), "current" seems to have the same id() in all the threads. I thought it "current" should be different objects for each thread. I'm using Eclipse for the debugging and maybe it's being wrong. Still, I'm confused at the Python environment within environment and all the module namespace importing stuff. Maybe someone can explain what is going on and how I solved it? Otherwise, web2py is working now.