Mac下我与Sunspot的一场战斗

缘起

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

冲突

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

亮剑

各种检查,我的文件和项目配置信息与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

其中 YAML.load(processed)[::Rails.env] 检查到这里发现,YAML.load 完后丢失了后面的节点,所以导致配置文件失效
具体在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的一场战斗)