# HG changeset patch # User ymh # Date 1395923226 -3600 # Node ID 381a03bcd1a75a82b19c864773b4b6c2cc9a6dc0 # Parent 157447feaaef49194a06324f9640c8f27e7e4619 add script for sync diff -r 157447feaaef -r 381a03bcd1a7 .hgignore --- a/.hgignore Thu Mar 27 12:55:28 2014 +0100 +++ b/.hgignore Thu Mar 27 13:27:06 2014 +0100 @@ -1,21 +1,14 @@ syntax: regexp ^virtualenv/web/project-boot\.py$ -syntax: regexp ^virtualenv/web/env$ -syntax: regexp ^src/spel/config\.py$ -syntax: regexp ^run$ -syntax: regexp ^web/static/site$ -syntax: regexp ^\.pydevproject$ -syntax: regexp ^\.settings/org\.eclipse\.core\.resources\.prefs$ -syntax: regexp ^web/\.htaccess$ -syntax: regexp ^web/static/media/ldt$ -syntax: regexp -\.mp4$ \ No newline at end of file +\.mp4$ +\.pyc$ +^sbin/sync/config.py$ diff -r 157447feaaef -r 381a03bcd1a7 sbin/sync/config.py.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbin/sync/config.py.tmpl Thu Mar 27 13:27:06 2014 +0100 @@ -0,0 +1,57 @@ +from fabric.api import env +from random import choice + +env.hosts = ['iri@spectacleenlignes.fr'] + +env.web_group = 'www-data' +env.folders = ['/var/log/spel', 'static/media'] + +env.repos = {'web' : {'repo':"/Users/ymh/dev/workspace/spel", 'src_root': 'src', 'module':''}} +env.base_export_path = "~/tmp" +env.export_prefix = "spel" + +env.remote_path = { + 'web':"/srv/www/spel/web", + 'src':"/srv/www/spel/src", + 'virtualenv':"/src/virtualenv/spel", + 'build_export':"/home/iri/tmp/build", + 'venv_export':"/home/iri/tmp/venv", +} + +env.platform_web_module = "spel" +env.remote_baseline_venv = "" + +env.rsync_filters = { + 'src' : [ + "P spel/config.py", + ], + 'web' : [ + "P robots.txt", + "P statc/media", + ], + 'venv': [ + "+ core", + ] +} +env.web_relaunch_cmd = "supervisorctl restart spel" + + +env.config = { + 'web': { + 'base_url': "/", + 'web_url': 'http://spectacleenlignes.fr', + 'db_engine':'postgresql_psycopg2', + 'db_name':'spel', + 'db_user': 'iri', + 'db_password': '', + 'db_host': 'localhost', + 'db_port': 5432, + 'haystack_url' : 'http://localhost:9200', + 'haystack_index' : 'spel', + 'log_file' : '/var/log/www/spel/spel.log', + 'secret_key' : ''.join([choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]), + }, +} + +env.check_folder_access = True + diff -r 157447feaaef -r 381a03bcd1a7 sbin/sync/fabfile.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbin/sync/fabfile.py Thu Mar 27 13:27:06 2014 +0100 @@ -0,0 +1,87 @@ +import imp +import os.path + +from fabric.api import task, env +from fabric.colors import green + +import config # @UnusedImport +from fablib import (export_version, do_sync_web, create_config, + clean_export_folder, do_sync_comp, sync_install_build, do_create_virtualenv, + clean_rsync_folder, rsync_export, get_comp_versions_dict, SyncComp, + do_relaunch_server) + + +@task +def relaunch_server(do_collectstatic=True, do_syncdb=True, do_check_folder_access=True): + print("Relaunch server") + do_relaunch_server(do_collectstatic, do_syncdb, env.get('check_folder_access',do_check_folder_access)) + +@task +def sync_web(version): + print(green("sync web with version %s" % version)) + export_path = export_version(web=version) + export_path_full = os.path.join(export_path,'web') + do_sync_web(version, export_path_full) + create_config(export_path_full) + clean_export_folder(export_path) + relaunch_server() + +@task +def update_lib(version, package): + print(green("update %s with version %s" % (package,version))) + export_path = export_version(web=version) + export_path_full = os.path.join(export_path,'web') + lib_path = os.path.join(export_path_full, "virtualenv", "res", "lib") + + f, pathname, description = imp.find_module("patch", [lib_path]) + imp.load_module("patch", f, pathname, description) + f, pathname, description = imp.find_module("lib_create_env", [lib_path]) + lib_create_env = imp.load_module("lib_create_env", f, pathname, description) + + package_path_full = os.path.join(export_path_full, "virtualenv", "res", "src", lib_create_env.URLS[package]['local']) + + sync_install_build(package_path_full) + clean_export_folder(export_path) + relaunch_server() + + +@task +def create_virtualenv(version): + print(green("create virtualenv with version %s" % version)) + export_path = export_version(web=version) + export_path_web = os.path.join(export_path,'web') + venv_remote_export_path = "" + try: + virtualenv_path = os.path.join(export_path_web, "virtualenv") + + venv_remote_export_path = os.path.join(env.remote_path['venv_export'], env.export_prefix, version,"virtualenv") + rsync_export(virtualenv_path, venv_remote_export_path, env.rsync_filters['venv']) + do_create_virtualenv(venv_remote_export_path, env.remote_path['virtualenv']) + finally: + clean_export_folder(export_path) + if venv_remote_export_path: + clean_rsync_folder(venv_remote_export_path) + +if len(env.repos) > 1: + @task + def sync_platform(version): + print(green("sync platform with version web %s" % (version))) + export_path = export_version(web=version) + + export_path_web = os.path.join(export_path,'web') + do_sync_web(version, export_path_web) + + comp_versions = get_comp_versions_dict(export_path_web) + + for key in [k for k in env.repos if k != 'web']: + export_path_key = export_version(**{key: comp_versions[key]}) + export_path_comp = os.path.join(export_path_key, key) + do_sync_comp(key, export_path_comp) + clean_export_folder(export_path_key) + + create_config(export_path_web) + clean_export_folder(export_path) + relaunch_server() + +for sync_name in [key for key in env.repos if key != 'web']: + globals()[sync_name] = SyncComp(sync_name) diff -r 157447feaaef -r 381a03bcd1a7 virtualenv/web/res/srvr_requirements.txt --- a/virtualenv/web/res/srvr_requirements.txt Thu Mar 27 12:55:28 2014 +0100 +++ b/virtualenv/web/res/srvr_requirements.txt Thu Mar 27 13:27:06 2014 +0100 @@ -1,3 +1,3 @@ python-memcached uWSGI -pytz \ No newline at end of file +pytz