2011-11-16 5 views
8

Próbuję skonfigurować lokalne środowisko deweloperskie Django za pomocą maszyn wirtualnych z obsługą Vagrant, ale nie jestem pewien, jaki jest najlepszy sposób na zrobienie tego.Jak skonfigurowałeś środowisko Django?

Zrobiłem git clone dla plików Django z serwera produkcyjnego i zainstalowałem wszystkie moduły, które serwer produkcyjny ma na mojej lokalnej maszynie wirtualnej. Chciałem uniknąć instalowania bazy danych na mojej lokalnej maszynie wirtualnej, ale miałem problemy z sesjami. Lokalna maszyna używa SESSION_COOKIE_DOMAIN='localhost', a produkcja korzysta z SESSION_COOKIE_DOMAIN='.mydomain.com', co stwarza pewne zamieszanie.

Nie wspominając już o tym, że na stronie settings.py w moim środowisku programistycznym musiałem zmienić adresy IP, aby wskazywały na publiczny adres IP bazy danych (w ten sposób robiąc dziurę w zabezpieczeniach), podczas gdy moja produkcja settings.py używa lokalne adresy IP, więc skończyło się na używaniu różnych plików settings.py.

Mogę kontynuować eksperymentowanie z nowymi metodami, ale naprawdę muszę iść z projektem i jestem pewien, że niektórzy już to zrozumieli.

Jak skonfigurowałeś środowisko Django?

+0

Pytania dotyczące StackOverflow powinny być ostatecznie odpowiedzialne. Istnieje wiele sposobów na skonfigurowanie środowiska Django, a większość z nich sprowadza się do osobistych preferencji zindywidualizowanych potrzeb danej aplikacji. Jeśli chcesz uzyskać jakieś pomysły, Google to miejsce. –

+0

@Chris Pratt Doceniam twój wkład. – avatar

+0

To pytanie pojawiło się już kilka razy. Zobacz http://stackoverflow.com/questions/1626326/how-to-manage-local-vs-production-settings-in-django i http://stackoverflow.com/questions/88259/how-do-you-configure -django-for-simple-development-and-Deployment –

Odpowiedz

1

Istnieje kilka aplikacji Django który Widziałem zarządzać tym, ale ja zawsze wolę następujących w moim settings.py jak liczba różnych configs są zwykle minimalne

SITE_TYPE = environ.get('SITE_TYPE', 'DEV') 

if SITE_TYPE == 'LIVE': 
    DEBUG = False 
    DEFAULT_HOST = '' 
else: 
    DEBUG = True 
    DEFAULT_HOST = '50.56.82.194' 
    EMAIL_HOST = DEFAULT_HOST 
+0

Czy masz oddzielną bazę danych dev, która jest podobna do produkcyjnej bazy danych lub kierujesz swój kod deweloperski Django do DB produkcji? Dziękuję za poświęcenie trochę światła temu tematowi. – avatar

2

Mam publicznego repo na GitHub dostępne tutaj:

https://github.com/FlipperPA/djangovagrant

instrukcje od README.md:

Django/Python/M ySQL

To jest projekt Vagrant dla rozwoju Django.

To jeszcze nie obsługuje berkshelf lub bibliotekarz; wszystkie niezbędne repo są zawarte w "książkach kucharskich".

wstępne, wszystkie platformy:

VirtualBox https://www.virtualbox.org/wiki/Downloads Vagrant http://downloads.vagrantup.com/

wstępne, Okna tylko:

git bash rubin RVM

dość łatwo dostać to działa:

vagrant up 
vagrant ssh djangovm 

** (Uwaga: Jesteś teraz w VirtualBox VM jako superużytkownika włóczęga)

sudo apt-get install python-pip 

** (Uwaga: PIP jest menedżer pakietów Pythona)

sudo apt-get install python-mysqldb 
sudo pip install django 

Zaczynając projekt Django:

django-admin.py startproject django_project 
cd django_project 
python manage.py runserver [::]:8000 

Maszyna wirtualna jest skonfigurowana do korzystania z przekierowania portów.Jeśli wszystko poszło dobrze, powinieneś być w stanie uzyskać dostęp do serwera z systemem za pośrednictwem przeglądarki na komputerze z uruchomioną maszynę wirtualną pod adresem URL:

http://localhost:8001/ 

nowy w Django? Następne kroki? Gorąco polecam: http://www.tangowithdjango.com/ Dla bardziej zaawansowanych tematów, sprawdź dwie miarki Django: http://twoscoopspress.org/

+0

Biorąc pod uwagę ostrzeżenie na stronie głównej djangobooka, dlaczego go polecasz? – pydanny

+0

Witaj pydanny, zaktualizowałem repozytorium w moim GitHub, aby wskazywało na Tango z Django, oraz na twoją doskonałą książkę Two Scoops of Django dla bardziej zaawansowanych tematów. Dzięki za heads up. – FlipperPA

+0

@FlipperPA: Czy wykryje zmiany i załaduje ponownie serwer 'django', jeśli dokonam zmiany w jakichkolwiek plikach' .py' na moim komputerze-gościu? Próbuję tego i nie przeładowuję serwera django. –

0

mogę polecić this repository.

Możesz go zmodyfikować, aby obsługiwał projekty Django.

Vagrantfile aktualizacje:

config.vm.define "web1", primary: true do |web1_config| 
    web1_config.ssh.forward_agent = true 

    # Create a private network, which allows host-only access to the machine 
    web1_config.vm.network "private_network", ip: "192.168.11.10" 
    web1_config.vm.hostname = "web1.#{domain}" 

    web1_config.vm.provision "shell", path: "provisioners/shell/python.setup.sh" 
    web1_config.vm.provision "shell", path: "provisioners/shell/application.setup.sh" 
    end 

Następnie dodać plik provisioners/shell/application.setup.sh o następującej treści:

#!/bin/bash 

local_user=vagrant 

if [ ! -n "$(grep "^bitbucket.org " /home/$local_user/.ssh/known_hosts)" ]; then 
    ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null; 
fi 

if [[ ! -d "/home/$local_user/app" ]]; then 
    git clone [email protected]:czerasz/sample-django-app.git /home/$local_user/app 

    chown -R $local_user:$local_user /home/$local_user/app 

    su - $local_user -c "source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv sample-django-app-env && workon sample-django-app-env && pip install -r /home/$local_user/app/requirements.txt" 
fi 

Zmienić repozytorium adres ([email protected]:czerasz/sample-django-app.git) i dokonać również upewnić się, że masz requirements.txt w korzeniu twojego repozytorium git. Uruchom vagrant up.

Vagrant rozpocznie dwie maszyny:

  • web1 z projektem django
  • db1 z bazy PoestgreSQL

Jeśli nadal masz problemy dodać następujące do Vagrantfile:

web1_config.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/bitbucket' ] 

i wykonać to polecenie na hoście (komputerze, na którym prowadzony vagrant):

ssh-add ~/.ssh/bitbucket 

~/.ssh/bitbucket jest ssh klucz prywatny, który używasz do bitbucket. Może to być ~/.ssh/id_rsa lub coś innego w zależności od konfiguracji.