Search code examples
pythondjangoproduction-environmentfabric

Django - Fabric & collecstatic - can't open file 'manage.py'


I'm begining to use Fabric for a Django production server.
Here is my fabfile.py

from fabric.api import *
env.hosts = ['me@myserver.net']
def srefresh():
  with path('~me/myproject'):
    run('python manage.py collectstatic')
    sudo('apachectl restart')

And here is the output

$ fab srefresh
[me@myserver.net] Executing task 'srefresh'
[me@myserver.net] run: python manage.py collectstatic
[me@myserver.net] out: python: can't open file 'manage.py': [Errno 2] No such file or directory

What am I doing wrong ?
(not sure I'm using the with context manager well)


Solution

  • Actually, it's quite clearly written in the docs. fabric.context_managers.path alters the PATH variable. fabric.context_managers.cd can be used to change the remote directory. So in your case:

    def srefresh():
        with cd('~me/myproject'):
            run('python manage.py collectstatic')
    

    should do the trick.