Я выполнил English UK Windows XP and SQL Server Express хорошо. И с британскими и со швейцарскими немецкими клавиатурами также
При установке SQL Server, язык по умолчанию является "us_english". Эта установка независима от локали ОС. Могут быть проблемы с датами, но это, почему у нас есть форматы данных ISO.
Вы имеете в виду "Выпуск N Windows XP", который исчез почти без трассировки...?
Странный. Я получил эту работу, включив this в конфигурацию nginx, как вы упомянули
proxy_set_header REMOTE_USER $remote_user;
Затем для файла trac.wsgi это
import trac.web.main
def application(environ, start_application):
environ['REMOTE_USER'] = environ.get('HTTP_REMOTE_USER')
return trac.web.main.dispatch_request(environ, start_application)
заменяет это
import trac.web.main
application = trac.web.main.dispatch_request
в вашем trac.wsgi
По-видимому, что-то есть в том, что происходит ' HTTP_ ', который портит аутентификацию trac
Я предполагаю, что то же самое, вероятно, можно было бы сделать, сделав то же самое только с заголовком запроса' HTTP_AUTHORIZATION ', но я не пытался этого сделать. Так что я не знаю наверняка, все, что я знаю, это то, что сейчас это работает!
У меня была аналогичная проблема с Mercurial; Ответ byoungb, приведенный выше, в принципе в порядке, но следует использовать X-Remote-User
, а не REMOTE_USER
в proxy_set_header
, а затем HTTP_X_REMOTE_USER
в вызове Environment.get ()
.
Однако, поскольку большинство людей используют SSL, а затем выполняют обычную аутентификацию, вы можете использовать заголовок Authorization
(который появляется в вашем окружение как HTTP_AUTHORIZATION
) следующим образом:
import base64, re
def use_basic_auth(application):
def auth_app(environ, start_response):
auth = environ.get('HTTP_AUTHORIZATION')
if auth:
scheme, creds = re.split(r'\s+', auth)
if scheme.lower() != 'basic':
raise ValueError('Unknown auth scheme \"%s\"' % scheme)
user, pword = base64.b64decode(creds).split(':', 1)
environ['REMOTE_USER'] = user
return application(environ, start_response)
return auth_app
Затем вы можете написать (для Trac)
application = use_basic_auth(trac.web.main.dispatch_request)
или, в моем случае (для Mercurial)
application = use_basic_auth(hgweb(config))
Это явно не будет работать, если вы используете что-то другое, кроме базовой аутентификации HTTP. В этом случае вы можете либо сделать то, что предлагает byoungb (хотя и использовать более удачное имя заголовка), либо или вы можете переместить аутентификацию в конец Python, а не заставлять nginx делать это. Обратной стороной последнего является то, что вы можете быть более уязвимыми, если где-то есть дыра в безопасности.