Created
January 3, 2011 02:25
-
-
Save parente/763048 to your computer and use it in GitHub Desktop.
Create a virtualenv for a Tornado app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
''' | |
Setup a virtualenv with tornado/master and a run script to serve static files. | |
''' | |
import virtualenv | |
import os | |
import subprocess | |
import stat | |
def after_install(options, home_dir): | |
# use pip to install tornado from github | |
pip = os.path.join(home_dir, 'bin', 'pip') | |
subprocess.call([pip, 'install', '-e', 'git+https://github.com/facebook/tornado.git#egg=Tornado']) | |
# create a www folder for static content | |
www = os.path.join(home_dir, 'www') | |
os.makedirs(www) | |
# write a simple tornado script | |
bin = os.path.join(home_dir, 'bin') | |
script = os.path.join(bin, 'run_server.py') | |
file(script, 'w').write("""\ | |
#!/usr/bin/env python | |
# tornado | |
import tornado.httpserver | |
import tornado.ioloop | |
import tornado.web | |
import tornado.options | |
# std lib | |
import os.path | |
import logging | |
# cmd line options | |
tornado.options.define('port', type=int, default=8080, | |
help='server port number (default: 8080)') | |
tornado.options.define('debug', type=bool, default=False, | |
help='run in debug mode with autoreload (default: false)') | |
if __name__ == '__main__': | |
tornado.options.parse_command_line() | |
options = tornado.options.options | |
kwargs = { | |
'debug' : options.debug, | |
'static_path' : os.path.join(os.path.dirname(__file__), "../www") | |
} | |
app = tornado.web.Application([], **kwargs) | |
http_server = tornado.httpserver.HTTPServer(app) | |
http_server.listen(options.port) | |
ioloop = tornado.ioloop.IOLoop.instance() | |
logging.info('started on port: %d', options.port) | |
ioloop.start() | |
""") | |
os.chmod(script, stat.S_IRWXU|stat.S_IRGRP|stat.S_IROTH) | |
# write an index.html | |
index = os.path.join(www, 'index.html') | |
file(index, 'w').write('''\ | |
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8" /> | |
<title>Hello from Tornado!</title> | |
</head> | |
<body>Hello from Tornado!</body> | |
</html> | |
''') | |
virtualenv.after_install = after_install | |
def adjust_options(options, args): | |
# force no site packages | |
options.no_site_packages = True | |
virtualenv.adjust_options = adjust_options | |
if __name__ == '__main__': | |
virtualenv.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment