Пример #1
0
def install_requirements(upgrade=False, upgrade_strategy='only-if-needed'):
    """
    Installs pip requirements
    """
    project_dir = get_project_dir()
    requirements_pip = os.path.join(project_dir, 'requirements.pip')
    # it is necessary to cd into project dir to support relative
    # paths inside requirements correctly
    with cd(project_dir):
        if files.exists(requirements_pip, use_sudo=True):
            print(cyan("Installing requirements.pip on {}".format(env.stage)))
            with _virtualenv(env.venv_path):
                _install_requirements(
                    requirements_pip, upgrade=upgrade, use_sudo=True,
                    upgrade_strategy=upgrade_strategy)

        requirements_txt = os.path.join(project_dir, 'requirements.txt')
        if files.exists(requirements_txt, use_sudo=True):
            print(cyan("Installing requirements.txt on {}".format(env.stage)))
            with _virtualenv(env.venv_path):
                _install_requirements(
                    requirements_txt, upgrade=upgrade, use_sudo=True,
                    upgrade_strategy=upgrade_strategy)

        extra_requirements = ctx('virtualenv.extra_requirements',
                                 default=False)
        if extra_requirements and isinstance(extra_requirements, list):
            for req in extra_requirements:
                print(cyan("Installing {} on {}".format(req, env.stage)))
                with _virtualenv(env.venv_path):
                    if req.startswith('./'):
                        req = os.path.join(project_dir, req[:2])
                    fabtools.python.install(req, use_sudo=True)
Пример #2
0
def setup_settings():
    """
    Takes the dploy/<STAGE>_settings.py template and upload it to remote
    django project location (as local_settings.py)
    """
    print(cyan("Setuping django settings project on {}".format(env.stage)))
    project_dir = get_project_dir()
    project_name = ctx('django.project_name')
    stage_settings = '{stage}_settings.py'.format(stage=env.stage)
    templates = [
        os.path.join('./dploy/', stage_settings),
        os.path.join('./', project_name, 'local_settings.py-dist'),
        os.path.join('./', project_name, 'local_settings.py-default'),
        os.path.join('./', project_name, 'local_settings.py-example'),
        os.path.join('./', project_name, 'local_settings.py.dist'),
        os.path.join('./', project_name, 'local_settings.py.default'),
        os.path.join('./', project_name, 'local_settings.py.example'),
    ]

    template = select_template(templates)
    if not template:
        print(red('ERROR: the project does not have a settings template'))
        print("The project must provide at least one of these file:")
        print("\n - {}\n".format("\n - ".join(templates)))
        sys.exit(1)

    filename = os.path.basename(template)
    templates_dir = os.path.dirname(template)
    _settings_dest = os.path.join(project_dir, project_name,
                                  'local_settings.py')
    upload_template(filename, _settings_dest, template_dir=templates_dir)
Пример #3
0
def setup():
    """
    System setup
    """
    project_dir = get_project_dir()
    # we install system dependencies only when we are sure the project hasn't
    # been deployed yet
    if not files.exists(project_dir, use_sudo=True):
        execute(install_dependencies)
    execute(create_dirs)
Пример #4
0
def setup():
    """
    Configure uWSGI
    """
    print(cyan('Configuring uwsgi {}'.format(env.stage)))
    project_dir = get_project_dir()
    wsgi_file = os.path.join(project_dir, ctx('django.project_name'),
                             'wsgi.py')
    uwsgi_ini = os.path.join(project_dir, 'uwsgi.ini')
    context = {'ctx': ctx, 'project_dir': project_dir, 'wsgi_file': wsgi_file}
    log_file = '{}/uwsgi.log'.format(ctx('logs.dirs.root'))
    sudo('touch {logfile}'.format(logfile=log_file))
    sudo('chown {user}:{group} {logfile}'.format(logfile=log_file,
                                                 user=ctx('system.user'),
                                                 group=ctx('system.group')))
    upload_template('uwsgi.template', uwsgi_ini, context=context)
Пример #5
0
def setup():
    """
    Configure supervisor to monitor the uwsgi process
    """
    print(cyan('Configuring supervisor {}'.format(env.stage)))
    if not fabtools.deb.is_installed('supervisor'):
        fabtools.deb.install('supervisor')
    project_dir = get_project_dir()
    uwsgi_ini = os.path.join(project_dir, 'uwsgi.ini')
    name = ctx('supervisor.program_name')
    context = {'uwsgi_ini': uwsgi_ini}
    dest = os.path.join(
        ctx('supervisor.dirs.root'),
        '{}.conf'.format(ctx('nginx.server_name').replace('.', '_')))
    upload_template('supervisor.template', dest, context=context)
    fabtools.supervisor.update_config()
    if fabtools.supervisor.process_status(name) == 'RUNNING':
        fabtools.supervisor.restart_process(name)
    elif fabtools.supervisor.process_status(name) == 'STOPPED':
        fabtools.supervisor.start_process(name)
Пример #6
0
def venv(i):
    venv_path = os.path.join(ctx('virtualenv.dirs.root'),
                             ctx('virtualenv.name'))
    with cd(get_project_dir()):
        return sudo('{}/bin/{}'.format(venv_path, i))