Colon in the front: YAML syntax

前端 未结 2 1153
情书的邮戳
情书的邮戳 2021-02-07 09:56

I\'m currently using Sidekiq in a project and I have the following YAML config file:

:concurrency: 5
:pidfile: /tmp/pids/sidekiq.pid
:logfile: log/sidekiq.log
st         


        
相关标签:
2条回答
  • 2021-02-07 10:45

    It is actually not sidekiq specific. The colon in front of a key just makes this key a symbol instead of a string:

    # example.yml
    a:
      value: 1
    :b:
      value: 2
    
    
    yaml = YAML.load_file('example.yml')
    
    yaml["a"] => { "value" => 1 }
    yaml[:b] => { "value" => 1 }
    

    So if your code accesses the config with key symbols, you should either add a colon in front of the key in the yaml file, or use some conversion of keys like #with_indifferent_access for the result hash (after parsing the yaml file)

    0 讨论(0)
  • 2021-02-07 10:49

    YAML keys starting with a colon generate symbolized keys in Ruby, whereas keys without a colon will generate stringified keys:

    require 'yaml'
    
    string =<<-END_OF_YAML
    :concurrency: 5
    :pidfile: /tmp/pids/sidekiq.pid
    :logfile: log/sidekiq.log
    staging:
      :concurrency: 10
    production:
      :concurrency: 20
    queues:
      - default
    END_OF_YAML
    
    YAML.load(string)
    # {
    #     :concurrency => 5,
    #     :pidfile     => "/tmp/pids/sidekiq.pid",
    #     :logfile     => "log/sidekiq.log",
    #     "staging"    => {
    #         :concurrency => 10
    #     },
    #     "production" => {
    #         :concurrency => 20
    #     },
    #     "queues"     => [
    #         [0] "default"
    #     ]
    # }
    

    Note: If a gem depends on symbolized keys then the stringified keys will not override its defaults.

    0 讨论(0)
提交回复
热议问题