代码之家  ›  专栏  ›  技术社区  ›  Andrew

rubyonrails:你能把Ruby代码放到YAML配置文件中吗?

  •  36
  • Andrew  · 技术社区  · 14 年前

    access_key_id: ENV['S3_KEY']
    secret_access_key: ENV['S3_SECRET']
    

    5 回复  |  直到 10 年前
        1
  •  66
  •   Sutto    14 年前

    loaded_data = YAML.load_file("my-file.yml")
    

    甚至

    loaded_data = YAML.load(File.read("my-file.yml"))
    

    loaded_data = YAML.load(ERB.new(File.read("my-file.yml")).result)
    

    在这种情况下,您必须查看加载文件的内容—在某些情况下, 它可能已经设计为直接从环境中加载,或者您可能需要:

    1. Fork+使用自定义版本。

        2
  •  13
  •   Mike Tunnicliffe    14 年前

    如果它是通过ERB来解释的,那么就可以了,在这种情况下,它的行为就像ERB视图,Ruby代码介于两者之间 <% %>

    尝试:

    access_key_id: <%= ENV['S3_KEY'] %>
    secret_access_key: <%= ENV['S3_SECRET'] %>
    

        3
  •  2
  •   Noz    11 年前

    以fd为例,如果您的应用程序配置为使用HAML,请尝试用字符串插值替换ERB语法。例如。,:

    access_key_id: #{ENV['S3_KEY']}
    secret_access_key: #{ENV['S3_SECRET']}
    

    access_key_id: <%= ENV['S3_KEY']} %>
    secret_access_key: <%= ENV['S3_SECRET'] %>
    
        4
  •  1
  •   Artur INTECH    9 年前

    对我来说就像一个魔咒,没有任何附加代码(Rails 4.2):

    default: &default
      adapter: <%= 'mysql2' %>
    
        5
  •  1
  •   Sergey K    8 年前

    # environment variables
    S3_KEY=01234
    S3_SECRET=56789
    
    # yaml file
    access_key_id: <%= ENV['S3_KEY'] %>
    secret_access_key: <%= ENV['S3_SECRET'] %>
    
    # then you can do
    ENV.fetch('access_key_id')
     => "01234"
    ENV.fetch('secret_access_key')
     => "56789"
    

    您还可以在YAML文件中以字符串形式编写ruby代码,然后对其进行求值

    # yaml file
    retry_interval: '5.minues'
    
    # then you can do
    eval(ENV.fetch('retry_interval'))
     => 300 seconds
    

    注意:使用eval时要非常小心,因为它会带来严重的安全风险