【问题标题】:Parsing apache2 config using nokogiri使用 nokogiri 解析 apache2 配置
【发布时间】:2012-04-03 13:16:10
【问题描述】:

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

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

这没有帮助。当尝试使用parsed.errors 检查对象时,我得到以下信息:

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

是否有任何 gem 或其他任何东西可以解析 apache 配置,编辑并保存它?

UPD:

这是我的配置文件:

LoadModule passenger_module /home/user/.rvm/gems/ree-1.8.7-2012.02@gemset/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /home/user/.rvm/gems/ree-1.8.7-2012.02@gemset/gems/passenger-3.0.11
PassengerRuby /home/user/.rvm/wrappers/ree-1.8.7-2012.02@gemset/ruby

<VirtualHost *:80>
ServerAdmin user@localhost

    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

【问题讨论】:

    标签: ruby-on-rails ruby apache2 nokogiri


    【解决方案1】:

    Apache 配置文件不是有效的 XML。它具有用于分组选项的类似 XML(很可能是类似 SGML)的标签,但它绝不是 XML。尝试使用 apache_config gem 来解析配置文件;虽然它似乎无人维护。

    【讨论】:

      【解决方案2】:
      Hash.from_xml(File.open("/path/to/config", "r").read)
      

      如果这不起作用,您还应该在此处发布配置文件的内容....

      【讨论】:

      • 是的,就像 Kovensky 说的那样,这不是有效的 XML,所以你不能像对待 xml 一样对待它。你的目标是什么?
      • 解析-编辑-保存。我找到了一颗宝石treetop。现在正在尝试编写解析器。
      【解决方案3】:

      你想完成什么?我认为你的应用不应该关心它运行的 apache 设置...

      【讨论】:

      • 我需要更改某些用户的配置以禁止或允许访问某些 webdav 目录。我想更改配置并执行正常重启。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多