2012-04-03 5 views
0

Как я могу разобрать apache2 конфигурационный файл, используя nokogiri или любой другой XML-парсер? Я пытался разобрать файл, используя Nokogiri::XML следующим образом:Parsing apache2 config using nokogiri

parsed = Nokogiri::XML(File.open("/home/user/config")) 

Это не помогло. При попытке проверить объект с помощью parsed.errors я получаю следующее:

[#<Nokogiri::XML::SyntaxError: Start tag expected, '<' not found>] 

Есть ли камни или что-нибудь еще, чтобы разобрать Apache конфигурации, редактировать и сохранять его?

UPD:

Вот мой конфигурационный файл:

LoadModule passenger_module /home/user/.rvm/gems/[email protected]/gems/passenger-3.0.11/ext/apache2/mod_passenger.so 
PassengerRoot /home/user/.rvm/gems/[email protected]/gems/passenger-3.0.11 
PassengerRuby /home/user/.rvm/wrappers/[email protected]/ruby 

<VirtualHost *:80> 
ServerAdmin [email protected] 

    RailsEnv staging 

DocumentRoot /path_to_project/public 
    Alias /webdav /path_to_project/public/dir 
    Alias /webdav-some-dir path_to_project/public/dir/another_dir 

ServerSignature On 
    <Directory path_to_project/public> 

     AllowOverride all  
     Options -MultiViews 
    AddDefaultCharset utf-8 

    </Directory> 

<Location /webdav> 
     DAV On 
     AuthType Basic 
     AuthName "webdav" 
     AuthUserFile /var/www/project_name/passwd.dav 
    PassengerEnabled off 
    Require globalAdministrator 
    <Limit GET OPTIONS PROPFIND> 
     Require user username #valid-user 
    </Limit> 
    <Limit PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
     Require user username #globalAdministrator 
    </Limit> 
    </Location> 
    <LocationMatch "/webdav/.+/.+/.+/.+/.+/.+"> 
    <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
     Require user username #valid-user 
    </Limit> 
    </LocationMatch> 

<Location /webdav-some-dir> 
     DAV On 
     AuthType Basic 
     AuthName "webdav" 
     AuthUserFile /var/www/project_name/passwd.dav 
    PassengerEnabled off 
    Require globalAdministrator 
    <Limit GET OPTIONS PROPFIND> 
     Require user username #valid-user 
    </Limit> 
    <Limit PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
     Require user username #valid-user 
    </Limit> 
    </Location> 
    <LocationMatch "/webdav-some-dir/.+/.+/.+/.+/.+"> 
    <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
     Require user username #valid-user 
    </Limit> 
    </LocationMatch> 

ErrorLog ${APACHE_LOG_DIR}/error.log 

LogLevel warn 

CustomLog ${APACHE_LOG_DIR}/access.log combined 

ответ

0
Hash.from_xml(File.open("/path/to/config", "r").read) 

Если это не работает вы schould также разместить содержимое конфигурационного файла здесь ... .

+0

Я обновил вопрос и добавил свой конфиг – RomanKapitonov

+0

Да, как Ковенский сказал, что нет правильного XML, поэтому вы не можете его рассматривать как xml. Какова ваша цель? – davidb

+0

Parse - изменить - сохранить. Я нашел драгоценный камень «treetop». Пытаемся написать парсер сейчас. – RomanKapitonov

4

Неверные файлы конфигурации Apache XML. Он имеет XML-подобные (скорее всего похожие на SGML) теги для группировки опций, но это никак не XML. Попробуйте использовать apache_config gem для анализа файла конфигурации; хотя кажется, что это не поддерживается.

0

Что вы пытаетесь достичь? Я думаю, что ваше приложение не должно беспокоиться о настройке apache, в которой он работает ...

+0

Мне нужно изменить конфигурацию для некоторых пользователей, чтобы запретить или разрешить доступ к некоторым каталогам webdav. Я хочу изменить конфигурацию и выполнить изящный перезапуск. – RomanKapitonov