Як я ставив SVN & Trac

Виникла в мене потреба в використанні на сервері системи контролю версій і багтрекінг системи. Так як локально я використовую svn, то і на сервері вирішив ставити svn.

SVN або Subversion – вільна централізована система контролю версій. Нещодавно (19 липня 2008) року вийшла нова версія 1.5.

Trac – гарна багтракінгова система і інструмент для керування проектами. Написана на python. В наступній версії обіцяють зробити можливість локалізації через gettext.

Ставив я це все щастя на свій VDS від RuWeb. Керувався офіційною документацією і статтею “Установка и настройка SVN сервера с доступом к репозиториям по http протоколу“. Тільки я налаштовував не як піддомени, а як директорії – http://myprojects.com/svn/ і http://myprojects.com/trac/.

Все поставилось нормально. Спочатку налаштував користувачів, створив групи, роздав права. Потім створив на сервері репозиторій і залив туди останню версію проекта. На локальній машині зробив check out, вніс певні зміни і спробував зробити commit. От тут і почалися приколи:

Commit failed (details follow):
PUT of bla-bla-bla/css/style.css 405 Not Allowed

Спробував комітити з сервака – нормально… І Сашка (Олександр Занічковський) з своєї консолі нормально закомітився. Почали гуглити. Сашка знайшов в кеші google статтю “Моя борьба с SVN” де автор описує аналогічну проблему. Як виявилося крайнім був nginx, який кешує всі статичні файли (css, js, jpg, gif і т.д.). Поправив в nginx.conf правило для директорії svn і все нормально запрацювало!

Привожу шматок статті, так як блог автора не працює, а в кеші гугля вона надовго не затримається:

Но — как оказалось, не все. Я не смог сделать commit в новосозданный svn.
Все что я смог получить — это только

RA layer request failed
svn: Commit failed (details follow):
svn: PUT of ‘/svn/project/!svn/wrk/
b5bb4e7a-997a-cc42-96eb-7b4fefc8fb09/project/js/
common.js’: 405 Not Allowed (http://webdeveloper.in.ua)

Сначала я решил, что проблема тут в правах доступа. Неудивительно — репозиторий-то я создавал из-под рута, а вызывается он из-под вебсервера… Хотя я и прописал chown для новосозданного репозитория, но мало ли…
Поэтому я выставил права на запись в репозиторий для всех.
Но это не помогло.
Кстати, именно это (проблема с правами доступа) было предложено в одном из списков рассылки.

Так как первое мое предположение оказалось неверным, и не решило проблемы, я продолжил поиски. И наткнулся (в другом месте) на предположение, что запрос обрабатывает кто-то другой, а не Апач.
Эту версию я и начал проверять. Я уже говорил, что у меня стоит NGNIX, для кеширования. И как раз CSS и JS он и должен кешировать.
Для начала, я попробовал закоммитить файл с расширением php, и — о чудо! это у меня получилось. Значит, проблема именно в перехвате файлов с определенными расширениями.
Значит, нужно перенастроить ngnix.

В конфигурации, которая используется на серверах FirstVDS, ngnix и Apache работают так:
все запросы идут на ngnix, и после этого все запросы, которые ngnix может обработать, он обрабатывает, а остальные — передает Апачу (который находится на другом порту).
Все что мне нужно было сделать — это запретить обработку запросов ngnix-ом, и заставить его перенаправлять все запросы на Апач. Что я и сделал.

Сразу после этого я перегрузил ngnix и попробовал залить проект в свой SVN.
И это наконец-то получилось. Так что теперь можно было работать спокойно, ну, и написать об этом заметку в блог.

Після цього був ще один прикол з Trac. Якщо прописати в httpd.conf налаштування, як в статті, то тоді будуть проблеми з logout. Тобто я натискаю logout і все одно залишаюсь авторизованим. Вирішується пробема наступним правилом:

<Location /trac>
        SetHandler mod_python
        PythonInterpreter main_interpreter
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnvParentDir /path/to/trac
        PythonOption TracUriRoot /trac
</Location>
<LocationMatch "/trac/[^/]+/login">
        AuthType Basic
        AuthName "stfalcon TRAC server"
        AuthUserFile /path/to/password/file
        Require valid-user
</LocationMatch>

Але тепер на trac може зайти будь хто. Ця “проблема” вирішується налаштуванням прав для неавторизованих користувачів в trac-admin (я залишив для них тільки можливість читати wiki).

Ну ніби все. Думаю в когось можуть виникнути схожі проблеми і мій досвід їм допоможе.

3 thoughts on “Як я ставив SVN & Trac

  1. Я в таких випадках все-таки надаю перевагу стороннім сервісам які пропонують вже налаштовані SVN з Trac чи ще чимось. Типу assembla.com. Звісно, мінус, що не ти цим керуєш, зате поки все працює – набагато менше мороки :)

  2. graywolf, мені не сподобалась assembla. тай не те це зовсім… на свому сервачку ти сам собі хазяїн. хочу так налаштував, хочу по другому.

    на post-commit хук почепив, який робить update тестової версії сайту і update живого сайту, якщо версія стабільна. плагінів пару до трака поставив, які час рахують. і т.д.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>