Рабочая подверсия под апачем и mod_python

Ваша функция слияния неверна. Это может быть (s1, s2) -> s1 + s2 или просто Integer::sum, если вы предпочитаете использовать ссылку на метод.

Еще один способ сделать это без потоков:

Map<String, Integer> studentMap = new LinkedHashMap<>();
studentList.forEach(s -> studentMap.merge(
                         s.getStudentName().toLowerCase(),
                         s.getMarks(),
                         Integer::sum));

Это итерирует список студентов и использует метод Map.merge для группировки их по имени, суммируя их оценки.

6
задан victorz 25 September 2008 в 15:16
поделиться

6 ответов

Это походит на среду Вы, апачский процесс работает под, немного необычно. По любой причине svn, кажется, думает пользовательские конфигурационные файлы, в которых это нуждается, находятся в корне/. Можно постараться не иметь использование svn корневые версии файлов путем определения на командной строке, которые конфигурируют каталог для использования, как так:

svn --config-dir /home/myuser/.subversion checkout http://example.com/path

Не фиксируя Вашу среду, это, по крайней мере, позволит Вам выполнять свой сценарий правильно...

5
ответ дан 17 December 2019 в 04:54
поделиться

Разве журнал ошибок Apache не дает Вам ключ к разгадке?

Возможно, это имеет отношение к SELinux. Проверьте /var/log/audit/audit.log и скорректируйте Вашу конфигурацию SELinux соответственно, если файл audit.log указывает, что это - SELinux, который запрещает доступа Apache.

0
ответ дан 17 December 2019 в 04:54
поделиться

Попытайтесь предоставить пользователю Apache (пользователь, что апачская услуга работает под), r+w полномочия на том файле.

0
ответ дан 17 December 2019 в 04:54
поделиться

Отклоненная ошибка Разрешения показывает, что сценарий работает с корневыми учетными данными, потому что это смотрит в домашнем dir корня для файлов.

Я предлагаю, чтобы Вы изменили сценарий рычага на что-то, что делает:

id > /tmp/id

так, чтобы можно было проверить результаты этого для проверки, каковы uid/gid и euid/egid. Вы, вероятно, найдете, что это на самом деле не работает как пользователь, Вы думаете, что это.

Моим первым предположением, как Troels, был также SELinux, но это только будет моим предположением, если Вы будете абсолютно уверены, что сценарий через Apache работает с точно тем же пользователем/группой как Ваш ручной тест.

0
ответ дан 17 December 2019 в 04:54
поделиться

Ну, благодаря всем, кто ответил на вопрос. Так или иначе я думаю, что решил тайну.

SELinux полностью отключен на машине, таким образом, проблема находится определенно в 'svn co', не бывший способный к найденному config_dir для учетной записи пользователя это работает под.

Apache / mod_python не читает в среде оболочки учетной записи пользователя, на которой работает апач. Таким образом для примера никакой $HOME не замечен mod_python, когда апач работает при некотором реальном пользователе (не никто)

Теперь 'svn co' имеет флаг - dir конфигурации, который указывает на каталог конфигурации для чтения параметрических усилителей из. По умолчанию это - $HOME/.subversion, т.е. это соответствует корневому каталогу учетной записи пользователя. По-видимому, когда никакой $HOME не существует, mod_python идет для укоренения домашнего dir (/корень) и пытается играть с .subversion содержанием там - который является, очевидно, терпит полный провал.

помещение

SetEnv ДОМАШНИЙ/home/qa

в/etc/httpd/conf/httpd.conf не решает проблему из-за SetEnv, не имеющего никакого отношения к среде оболочки - это только устанавливает связанную с апачами среду

Аналогично PythonOption - устанавливает только mod_python связанные переменные, которые могут быть считаны с req.get_options () после этого

При выполнении 'svn co - dir конфигурации/home/...' определенно дает обходное решение для выполнения из mod_python, но мешает тем, кто попытается запустить скрипт из командной строки.

Так предложенный (и работающий) решение состоит в том, чтобы установить переменную Домашней среды до стартового апача.

Например, в/etc/init.d/httpd сценарии

    QAHOME=/home/qa
    ...
    HOME=$QAHOME LANG=$HTTPD_LANG daemon $httpd $OPTIONS
0
ответ дан 17 December 2019 в 04:54
поделиться

Происходит следующее: apache запускается с переменными окружения root, поэтому он думает, что должен найти свои файлы конфигурации в /root/. Это не так. Что происходит, если вы делаете sudo apache2ctl start, он извлекает вашу переменную $HOME из sudo $HOME=/root/

Я только что нашел решение этой проблемы (хотя и с mod_perl, но то же самое)

выполните эту команду (если это apache 1, удалите 2):

sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 start

Когда /etc/init.d/apache2 запускает apache, он устанавливает все необходимые переменные окружения, под которыми должен работать apache.

0
ответ дан 17 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: