美文网首页
Mac下我与Sunspot的一场战斗

Mac下我与Sunspot的一场战斗

作者: bruce_wu | 来源:发表于2015-07-01 19:14 被阅读57次

    缘起

    最近换了电脑,系统换到了OSX下,开发环境自然也就迁移到了🍎的系统下
    OSX是类unix系统,搭建环境没有太大问题。

    冲突

    But 这几天在rails下使用sunspot却出了问题,无法加载配置<code>sunspot.yml</code>文件

    亮剑

    各种检查,我的文件和项目配置信息与linux均保持一致,网上一顿搜索也没有找到相关的信息。那么只有看源代码了这一招了。
    找到sunspot_rails 下的相关源码在 rails/configuration.rb 这里.

    path = File.join(::Rails.root, 'config', 'sunspot.yml')
    if File.exist?(path)
       File.open(path) do |file|
         processed = ERB.new(file.read).result
         YAML.load(processed)[::Rails.env]
       end
    else
      {}
    end
    

    其中 <code> YAML.load(processed)[::Rails.env] </code>检查到这里发现,<code>YAML.load</code> 完后丢失了后面的节点,所以导致配置文件失效
    具体在console里面监视如下:

    file=File.open(path);processed=ERB.new(file.read).result
    =>"production:\n  solr:\n    hostname: solr1.domain.com\n    port: 8983\n    log_level: WARNING\n    path: /solr\n    auto_commit_after_request: false\ndevelopment:\n  solr:\n    hostname: solr1.domain.com\n    port: 8983\n    log_level: INFO\n    path: /solr\n    auto_commit_after_request: false\ntest:\n  solr:\n    hostname: solr1.domain.com\n    port: 8981\n    log_level: WARNING\n    path: /solr/test\n    auto_commit_after_request: false" 
    YAML.load(processed)[::Rails.env]
    => {"production"=>{"solr"=>{"hostname"=>"solr1.domain.com", "port"=>8983, "log_level"=>"WARNING", "path"=>"/solr", "auto_commit_after_request"=>false}}} 
    
    #可以看到只加载了 production 节点
    

    结局

    经过各种测试和研究,最终确定需要在yml文件头部加一个空行或者注释就可以正常加载了。

    相关文章

      网友评论

          本文标题:Mac下我与Sunspot的一场战斗

          本文链接:https://www.haomeiwen.com/subject/ytxyqttx.html