Thursday, December 4, 2008

Django uygulamasını deploy etmek


Django uygulamamı deploy ederken karşılaştığım sorunu ve sorunun çözümünü paylaşmak istiyorum. Bilişim Terimleri sitesi deploy teriminin Türkçe karşılığı icin yerleştirme, konuşlandırma terimlerini kullanmış. Fakat bu karşılıklar bana biraz komik geldiği için ("Abi dün gece uygulamayı yerleştirirken problem oldu" gibi), ben "deploy" terimini Türkçeye çevirmeden kullanmaya devam edeceğim.

Bu yazıda bahsettiğim Django (cango diye okunuyor) Tatlı Kaçıklar dizisinde oynayan Mehmet Ali Erbil'in köpeği değil Python ile geliştirilmiş bir Web Framework. Python ile geliştirilmiş onca web framework arasından Django'yu seçmemin nedeni çok iyi bir dokümantasyona sahip olması (gerçekten çok iyi, abartmıyorum) ve web sitesinde yapılan şu Django tanımı oldu :

Web Framework For Perfectionists With Deadlines


Kısaca Django reklamı yaptıktan sonra ana meseleye gelelim. Yazının bundan sonrası Django ile ilgilenmeyenler için sıkıcı olabilir baştan söyleyeyim.
Django, uygulama ayarlarını setting.py dosyasından okur. Genelde development ve test yaparken kullandığınız ayarlar ile production ortamında kullandığınız ayarlar aynı olmaz. En basit örneği database ayarları: url, database adı, kullanıcı adı, şifre gibi.. settings.py dosyasını production sunucusuna upload ettikten sonra her seferinde gidip settings.py'de production ayarlarını yapmak bir süre sonra insanı bayar. Uygulamayı deploy ettikten sonra sağını solunu değiştirmeden çalıştırabilmek için setting.py dosyasına aşağıdaki numarayı çekiyoruz: (Dosyanın sonuna bu satırları yazıyoruz)

try:
from settings_local import *
except ImportError:
pass

Bu sayede Django settings.py'deki ayarları yükledikten sonra settings_local.py dosyamızdaki ayarları yükler. settings_local.py dosyasında development ve test platformunda kullanmak istediğimiz ayarları yazarız. settings_local.py dosyasını production sunucusuna upload etmemize gerek yok, çünkü bu dosyada çalışma ortamımızın production ortamından farkını yazıyoruz. Örnek bir settings_local.py dosyası şu şekildedir:

DEBUG = True

DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'tututil'
DATABASE_USER = 'nikli'
DATABASE_PASSWORD = 'drowssap
DATABASE_HOST = ''
DATABASE_PORT = ''

MEDIA_ROOT = '/var/www/GOF'
MEDIA_URL = 'http://localhost/gof/'

settings_local.py dosyası settings.py ile aynı klasörde olmalıdır. Dosyalarınızı FTP ile production sunucusuna gönderirken aman dikkat edin settings_local.py dosyasını göndermeyin.