Я не могу заставить Mercurial работать под Apache на Mac OS X Lion

Я пытаюсь заставить Mercurial работать с использованием hgwebdir.cgi под Apache на Mac OS X Lion.

Я следовал указаниям, перечисленным здесь: http://www.popitandrockit.com/2010/05/mercurial-server-on-osx-106-snow.html

Эта статья для Snow Leopard (я думаю, никто еще не пытался сделать это на Lion?), Но в основном это работает. Я сделал изменение, которое я не использовал https, потому что рассматриваемая машина находится за брандмауэром моей компании.

Он говорит, что я должен иметь доступ к хранилищу в http://servername/repository_name но это не работает Однако я могу получить их список на http://servername/hg/, где /hg это ScriptAlias адрес. Так что я должен быть в состоянии добраться до хранилища через http://servername/hg/repository_name, но вместо этого я получаю хорошую страницу Mercurial, рассказывающую мне

An error has occured while processing your request:

repository /Users/username/Documents/repository_name not found

Ну, каталог действителен, и в нем есть действительное хранилище в соответствии с Mercurial (т.е. hg log и подобные команды не выдают ошибку)

На главной странице я получаю похожие ошибки в Apache:

[(date)] [error] [client (ip address)] error accessing repository at /Users/username/Documents/repository_name

Если бы я предположил, я бы сказал, что это была какая-то проблема с доступом или разрешениями, но я недостаточно знаком с Apache или Mac OS X Lion, чтобы рискнуть предположить, как это исправить.

1 ответ

Решение

Это действительно похоже на проблему с разрешениями. На стандартной Mac OS X Apache устанавливается веб-пользователь и группа _www и вам нужно убедиться, что они имеют права на чтение и запись. Также Mercurial жалуется, если права доступа к файлу hgrc не соответствуют пользователю. Есть два способа это исправить:

  1. Сделайте репозиторий, принадлежащий Apache _www пользователь. Когда вы печатаете:

    ls -ld /Users/username/Documents/repository_name
    

    Это должно показать _www_www в третьем и четвертом столбце. Если нет, измените пользователя каталога:

    sudo chown -R _www:_www /Users/username/Documents/repository_name
    

    Обратите внимание, что если вы измените это, вы не должны получать доступ к хранилищу в файловой системе от любого другого пользователя, иначе любые вновь созданные файлы снова будут иметь неправильные разрешения.

  2. Кроме того, явно добавьте своего пользователя в trusted раздел в вашем hgweb.config:

    [trusted]
    users=username
    

    В этом случае вам все еще нужно убедиться, что _www пользователь имеет доступ вообще. Если вы введете:

    ls -ld /Users/username/Documents/repository_name
    

    Это должно показать что-то вроде drwxrwxr-- в первом столбце (в середине rw важны) и _www в четвертом. Если файлы не доступны для чтения или записи группой, используйте команду chmod, чтобы сделать их:

    chmod -R go+rwX /Users/username/Documents/repository_name
    

    И вы можете изменить группу вашего хранилища на _www вот так:

    sudo chown -R :_www /Users/username/Documents/repository_name
    

Какой из этих двух вариантов предпочтительнее, зависит от вашей ситуации: если вы пытаетесь разместить свой репозиторий на сервере, я бы сказал, что первый вариант предпочтительнее, он проще и немного более безопасен. Если вы пытаетесь разместить его на своей локальной рабочей станции для удобства, второе будет проще, потому что тогда вы все равно сможете получить доступ к хранилищу от вашего текущего пользователя.

Обратите внимание, что для специального обмена может быть проще просто запустить hg serve в командной строке.

Надеюсь, это поможет.

Другие вопросы по тегам