缘起
最近换了电脑,系统换到了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文件头部加一个空行或者注释就可以正常加载了。
网友评论