Я не могу заставить 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 не соответствуют пользователю. Есть два способа это исправить:
Сделайте репозиторий, принадлежащий Apache
_www
пользователь. Когда вы печатаете:ls -ld /Users/username/Documents/repository_name
Это должно показать
_www
_www
в третьем и четвертом столбце. Если нет, измените пользователя каталога:sudo chown -R _www:_www /Users/username/Documents/repository_name
Обратите внимание, что если вы измените это, вы не должны получать доступ к хранилищу в файловой системе от любого другого пользователя, иначе любые вновь созданные файлы снова будут иметь неправильные разрешения.
Кроме того, явно добавьте своего пользователя в
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
в командной строке.
Надеюсь, это поможет.