我目前正在项目中使用Sidekiq,我有以下YAML配置文件:
:concurrency: 5
:pidfile: /tmp/pids/sidekiq.pid
:logfile: log/sidekiq.log
staging:
:concurrency: 10
production:
:concurrency: 20
queues:
- default
我之前没有看到在一把钥匙前面有一个冒号,但省略了冒号会产生有趣的结果。例如,在:pidfile:
的情况下,冒号位于前面,它会创建/覆盖目标文件,如果没有它,它会使用已经存在的目标文件并且不会写入它。
这是在某处记录的,还是Sidekiq对某些键的期望?
答案 0 :(得分:15)
以冒号开头的YAML键在Ruby中生成符号化键,而没有冒号的键将生成字符串化键:
{{1}}
注意:如果gem依赖于符号化键,则字符串化键不会覆盖其默认值。
答案 1 :(得分:3)
实际上并非特定于sidekiq。键前面的冒号只是使该键成为符号而不是字符串:
# example.yml
a:
value: 1
:b:
value: 2
yaml = YAML.load_file('example.yml')
yaml["a"] => { "value" => 1 }
yaml[:b] => { "value" => 1 }
因此,如果您的代码使用键符号访问配置,您应该在yaml文件中的键前添加冒号,或者对结果哈希使用#with_indifferent_access
之类的一些键转换(在解析之后) yaml文件)