Fabric - среда проекта - PullRequest
0 голосов
/ 29 марта 2012

Давайте рассмотрим это fabfile

def syncdb():
  print(green("Database Synchronization ..."))
  with cd('/var/www/project'):
    sudo('python manage.py syncdb', user='www-data')

def colstat():
  print(green("Collecting Static Files..."))
  with cd('/var/www/project'):
    sudo('python manage.py collectstatic --noinput', user='www-data')

def httpdrst():
  print(green("Restarting Apache..."))
  sudo('apachectl restart')

def srefresh():
  colstat()
  syncdb()
  httpdrst()

Директива srefresh вызывает все остальные, некоторые из которых with cd(...)

Что будет лучшим способомиметь этот 'путь CD' в переменной?

def colstat():
  with cd(env.remote['path']):

def srefresh():
  env.remote['path'] = '/var/www/project'
  colstat()
  syncdb()
  httpdrst()

Что-то подобное?

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Я бы просто передал переменную в функции в качестве аргумента.

def syncdb(path):
  print(green("Database Synchronization ..."))
  with cd(path):
    sudo('python manage.py syncdb', user='www-data')

def colstat(path):
  print(green("Collecting Static Files..."))
  with cd(path):
    sudo('python manage.py collectstatic --noinput', user='www-data')

def httpdrst():
  print(green("Restarting Apache..."))
  sudo('apachectl restart')

def srefresh():
  path = '/var/www/project'
  colstat(path)
  syncdb(path)
  httpdrst()
0 голосов
/ 30 марта 2012

Не уверен, что это хорошая практика, но, похоже, с этим справляются

env.remote_path = '/var/www/project'

def colstat():
  with cd(env.remote_path):

#...

def srefresh():
  env.remote_path = '/var/www/other_project'
  pushpull()
  colstat()
#...
...