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"
                     )
                )
  }
 
}

Leave a comment

Your comment

Click to Insert Smiley

SmileBig SmileGrinLaughFrownBig FrownCryNeutralWinkKissRazzChicCoolAngryReally AngryConfusedQuestionThinkingPainShockYesNoLOLSillyBeautyLashesCuteShyBlushKissedIn LoveDroolGiggleSnickerHeh!SmirkWiltWeepIDKStruggleSide FrownDazedHypnotizedSweatEek!Roll EyesSarcasmDisdainSmugMoney MouthFoot in MouthShut MouthQuietShameBeat UpMeanEvil GrinGrit TeethShoutPissed OffReally PissedMad RazzDrunken RazzSickYawnSleepyDanceClapJumpHandshakeHigh FiveHug LeftHug RightKiss BlowKissingByeGo AwayCall MeOn the PhoneSecretMeetingWavingStopTime OutTalk to the HandLoserLyingDOH!Fingers CrossedWaitingSuspenseTremblePrayWorshipStarvingEatVictoryCurseAlienAngelClownCowboyCyclopsDevilDoctorFemale FighterMale FighterMohawkMusicNerdPartyPirateSkywalkerSnowmanSoldierVampireZombie KillerGhostSkeletonBunnyCatCat 2ChickChickenChicken 2CowCow 2DogDog 2DuckGoatHippoKoalaLionMonkeyMonkey 2MousePandaPigPig 2SheepSheep 2ReindeerSnailTigerTurtleBeerDrinkLiquorCoffeeCakePizzaWatermelonBowlPlateCanFemaleMaleHeartBroken HeartRoseDead RosePeaceYin YangUS FlagMoonStarSunCloudyRainThunderUmbrellaRainbowMusic NoteAirplaneCarIslandAnnouncebrbMailCellPhoneCameraFilmTVClockLampSearchCoinsComputerConsolePresentSoccerCloverPumpkinBombHammerKnifeHandcuffsPillPoopCigarette