Ho un problema quando utilizzo Fabric per simulare il flusso di lavoro SSH per distribuire la mia applicazione web.Cambiare utente in Fabric
Ecco il mio solito flusso di comandi quando ho SSH ad un server:
- SSH utilizzando utente root. ssh [email protected]
- Passa a utente web: su - web
- Cambio directory: cd/srv/web/prod/abc_project
- Inizio virtualenv: workon abc_env
- Eseguire git pull: origine tirare git padroneggiare
- Esegui uno script: build_stuff -m costruire
- eseguire un altro script: ./Run
ho cercato di scrivere questo come uno script deploy in tessuto e ho un uscita shell quando s u - il web è inserito. Devo premere Ctrl-D per continuare lo script. Sono anche in grado di attivare il mio virtualenv .... perché: su - web passa con successo l'utente a web
ma a causa del Ctrl-d (in modo che possa continuare lo script Fabric), si disconnette da tale utente e torna a radice.
Ecco il mio script:
env.user = 'root'
@roles('web')
def deploy():
dev_path = '/srv/web/prod'
app_path = '/srv/web/prod/rhino'
workon = 'workon rhino_env'
with prefix('su - web'):
puts('Switched to `web` user')
with settings(warn_only=True):
run('kill -9 `cat /srv/web/run/rhino/rhino.pid`')
puts('Stopped rhino...')
with cd(app_path):
run('git reset --hard HEAD')
puts('Discarded all untracked and modified files')
run('git checkout master')
run('git pull origin master')
users = run('users')
puts('Output from `users` command: %s' % users)
run(workon)
run('build_assets -m build')
run('cd %(dev_path)s; chown -R web:ebalu rhino' % {'dev_path': dev_path})
run('cd %(app_path)s; ./run' % {'app_path': app_path})
pid = run('cat /srv/web/run/rhino/rhino.pid')
puts('Rhino started again with pid: %s.' % pid)
... c'è una cosa più: No, non posso effettuare il login come web inizialmente, devo effettuare il login come root. È l'utente Web che ha virtualenv e non l'utente root.
Grazie mille! Non ho mai pensato di eseguire comandi git usando l'utente web. Ho continuato a provare a usare 'su - web' di fronte ai comandi git. Grazie mille milioni di menti! – Mark