2015-12-27 2 views
3

У меня есть 2 сайта, в том же виртуальном env, в двух разных apache VirtualHosts.manage.py syncdb использует db другого проекта в virtualenv

Когда я бегу python manage.py syncdb, он говорит:

Creating tables ... 
Installing custom SQL ... 
Installing indexes ... 
Installed 0 object(s) from 0 fixture(s) 

Когда я бегу python manage.py inspectdb > somefile.txt, детали другого сайта появляются в somefile.txt.

So python manage.py вызывает файл /var/www/venv/proj1/manage.py, даже если я сижу в каталоге: ``/var/www/venv/proj2/`. Любая причина, которая может вызвать это или как диагностировать это?

manage.py:

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj1.settings") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

И это, как я проверил $ ​​PYTHONPATH:

# $PYTHONPATH 
-bash: /var/www/virtualenv-2.7/proj1:/var/www/virtualenv-2.7/proj2:: No such file or directory 

И это .bash_profile:

# .bash_profile 

# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
     . ~/.bashrc 
fi 

# User specific environment and startup programs 

PATH=$PATH:$HOME/bin 

export PATH 


PYTHONPATH=/var/www/virtualenv-2.7/proj2:$PYTHONPATH 
PYTHONPATH=/var/www/virtualenv-2.7/proj1:$PYTHONPATH 
export PYTHONPATH 

export DJANGO_SETTINGS_MODULE="proj2.settings" #possibly the issue? 
+0

Не могли бы вы показать, что находится внутри этого 'manage.py'? Благодарю. – alecxe

+0

@alecxe добавил к выше – User

+0

Кстати, я помню, что у меня было много странных проблем, когда два виртуальных хоста apache использовали одну и ту же среду python - в основном модули на основе C начали сбой совершенно безумными способами. – alecxe

ответ

2

Ваша проблема в том, что ваш PYTHONPATH имеет proj1, указанный до proj2. В этом случае python сначала рассмотрит proj1 для manage.py и выполнит его и пропустит manage.py в текущем каталоге, даже если он существует.

Как быстро исправить, добавить текущую директорию в PYTHONPATH, как это:

PYTHONPATH=/var/www/virtualenv-2.7/proj2 
PYTHONPATH=/var/www/virtualenv-2.7/proj1:$PYTHONPATH 
PYTHONPATH=.:$PYTHONPATH 
export PYTHONPATH 

Это будет первый проверить сценарий, который вы ищете в текущем каталоге.

Кроме того, если у вас нет конкретной цели, вы можете потерять конкретные пути к проекту и всегда начинать manage.py из соответствующего каталога.

Смежные вопросы