tutorial fabric2 python bash fabric

python - tutorial - fabric2



¿Cómo creo un nuevo archivo en un host remoto en tejido(herramienta de implementación de python)? (4)

Lo que hago es tener el archivo localmente como algo así como "app.wsgi.template".

Luego uso tokens en el archivo, como:

import sys, os sys.path.insert(0, "/ruby/$HOST$/www/$HOST$/django-projects") sys.path.insert(0, "/ruby/$HOST$/www/$HOST$/django-projects/project") import django.core.handlers.wsgi os.environ[''DJANGO_SETTINGS_MODULE''] = ''project.settings'' application = django.core.handlers.wsgi.WSGIHandler()

Utilizo la estructura para "colocar" el archivo en el host remoto, luego uso "sed" (o funciones equivalentes en Python) para reemplazar los tokens "$ HOST $" y "$ USER $" con los valores que quiero.

run("sed -i backup -e ''s/$USER$/%s'' -e ''s/$HOST$/%s'' app.wsgi.template" % (user, host)) run("mv app.wsgi.template app.wsgi")

Me gustaría crear un archivo con el nombre passenger_wsgi.py en un host remoto. Me gustaría usar la siguiente cadena para crear el contenido del archivo:

'''''' import sys, os sys.path.insert(0, "/ruby/%s/www/%s/django-projects") sys.path.insert(0, "/ruby/%s/www/%s/django-projects/project") import django.core.handlers.wsgi os.environ[''DJANGO_SETTINGS_MODULE''] = ''project.settings'' application = django.core.handlers.wsgi.WSGIHandler() '''''' % (user,host,user,host)

Las variables de usuario y host serían parámetros de la función fabric.

Soy un novato total en cualquier tipo de manipulación de archivos en Python, pero tampoco estoy realmente seguro de cuál debería ser el procedimiento en la estructura. ¿Debo crear el archivo localmente y luego cargarlo con el comando put (y luego eliminar la versión local)? ¿Debo crear el archivo en el host remoto con un comando bash apropiado (usando la ejecución de fabric)? Si es así, entonces, ¿cuál es la mejor manera de lidiar con todo el "y ''en la cadena - se escapará la tela? ¿O debería estar abordando esto de alguna manera diferente?



StringIO con put funciona con un poco de edición. Prueba esto:

put(StringIO.StringIO( '''''' import sys, os sys.path.insert(0, "/ruby/%s/www/%s/django-projects") sys.path.insert(0, "/ruby/%s/www/%s/django-projects/project") import django.core.handlers.wsgi os.environ[''DJANGO_SETTINGS_MODULE''] = ''project.settings'' application = django.core.handlers.wsgi.WSGIHandler() '''''' % (user,host,user,host)), "remote-path")

Si tiene un problema con los permisos, intente esto:

put(StringIO.StringIO( '''''' import sys, os sys.path.insert(0, "/ruby/%s/www/%s/django-projects") sys.path.insert(0, "/ruby/%s/www/%s/django-projects/project") import django.core.handlers.wsgi os.environ[''DJANGO_SETTINGS_MODULE''] = ''project.settings'' application = django.core.handlers.wsgi.WSGIHandler() '''''' % (user,host,user,host)), "remote-path", use_sudo=True)


Utilice StringIO con put:

text = '''''' import sys, os sys.path.insert(0, "/ruby/%s/www/%s/django-projects") sys.path.insert(0, "/ruby/%s/www/%s/django-projects/project") import django.core.handlers.wsgi os.environ[''DJANGO_SETTINGS_MODULE''] = ''project.settings'' application = django.core.handlers.wsgi.WSGIHandler() '''''' % (user, host, user, host) import StringIO put(StringIO.StringIO(text), "remote-path")