2012-04-03 40 views
0

如何使用nokogiri或任何其他xml解析器解析apache2配置文件?我试图解析使用Nokogiri::XML以下方式文件:使用nokogiri解析apache2配置

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 2012-04-03 14:05:42

+0

是的,像Kovensky说,这是没有有效的XML,所以你不能把它看作是XML。你的目标是什么? – davidb 2012-04-03 15:02:40

+0

解析 - 编辑 - 保存。我找到了一个宝石“树梢”。试图现在写一个解析器。 – RomanKapitonov 2012-04-03 17:17:57

4

Apache配置文件无效XML。它具有类似于XML的(很可能类似于SGML的)标记用于分组选项,但它不以任何方式XML。尝试apache_config gem解析配置文件;尽管它似乎没有维护。

0

你想完成什么?我认为你的应用程序不应该担心它正在运行的Apache设置...

+0

我需要更改某些用户的配置以禁止或允许访问某些webdav目录。我想更改配置并执行平滑重启。 – RomanKapitonov 2012-04-04 11:49:14