TracFastCGI ve lighttpd
Aşağıdaki yazı lighttpd’nin 1.4.22 ve öncesi sürümleri için geçerlidir. Yeni sürümde (1.4.23 ve üstü) fastcgi.server array’inin içerisine sadece "fix-root-scriptname" => "enable", satırını eklemeniz yeterlidir.
Diyelim ki birden fazla trac projesine bir adreste göstermek istiyorsunuz ve (Yani proje ana sayfasında Available Projects adı altında projelerinizi listelemek istiyorsunuz) trac’i lighttpd’nin fastcgi altyapısı ile çalıştırıyorsunuz. Normal bir kurulum yaptınız, herşey tamam gibi görünüyor, TRAC_ENV_PARENT_DIR değişkenini de atadınız ve proje sayfası istediğiniz gibi görünüyor. Ancak o da ne? url/projeismi bağlantısına tıkladığınızda yine proje anasayfası açılıyor ve url/projeismi/projeismi şeklinde bağlantı görüyorsunuz. İkinci defa bağlantıya tıkladığınızda istediğiniz proje sayfası anca görünüyor. Böyle kullanmak istiyorsanız engel olamam tabii; ancak sinek ufaktır ama mide bulandırır.
Gelelim bu sorunu nasıl çözeriz:
/usr/lib/python2.6/site-packages/trac/web/main.py (path değişik olabilir sizde haliyle) dosyasında şu satırı bulun, 0.11.3 içerisinde 332. satır sanırım:
environ['SCRIPT_NAME'] = script_url[:-len(path_info)]
O satırın altına şu 3 satırı ekleyin:
if os.getenv("TRAC_LIGHTTPD_ROOT_WORKAROUND"): environ['PATH_INFO'] = environ['SCRIPT_NAME'] + environ['PATH_INFO'] environ['SCRIPT_NAME'] = os.getenv('TRAC_LIGHTTPD_ROOT_WORKAROUND')
Tabii python olduğu girintilemeye (indent) dikkat etmeyi unutmayın.
Bunu da hallettikten sonra, lighttpd’nin yapılandırma dosyasında, bin-environment altına,
"TRAC_LIGHTTPD_ROOT_WORKAROUND" => "/" satırını ekleyin.
Örnek bir yapılandırma dosyası da şu şekilde:
$HTTP["host"] == "trac.domain.com" { server.document-root = "/path/to/documentroot" alias.url = ( "/chrome/common/" => "/usr/lib/python2.6/site-packages/trac/htdocs/", ) fastcgi.server = ( "/" => ( ( "bin-path" => "/usr/share/trac/trac.fcgi", "socket" => "/tmp/trac.sock", "check-local" => "disable", "disable-time" => 1, "min-procs" => 1, "max-procs" => 1, "bin-environment" => ( "TRAC_ENV_PARENT_DIR" => "/path/to/top/level/of/trac/projects", "TRAC_LIGHTTPD_ROOT_WORKAROUND" => "/" ), ), ), ) # Use same htpasswd file for all projects auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/path/to/htpasswd" $HTTP["url"] =~ "^/.*/login$" { auth.require = ("/" => ( "method" => "basic", "realm" => "trac", "require" => "valid-user" ) ) } }