【问题标题】:How to use YAML files with Vagrant?如何在 Vagrant 中使用 YAML 文件?
【发布时间】:2016-10-24 02:53:56
【问题描述】:

我正在尝试为我的 Vagrant 项目改进我的 YAML 文件。根据this post,如果我有这样的事情:

en:
  site_name: "Site Name"
  static_pages:
    company:
      description: ! '%{site_name} is an online system'

我应该可以打印"Site Name is an online system",但我不知道如何在我的Vagrantfile 中使用它。 我试过了,但我无法正确打印出来,只是这样:

%{site_name} is an online system

这就是我的使用方式:

require 'yaml'
set = YAML.load_file(ENV['DEVOPS_HOME'] + '/vagrant/server/settings.yml')
puts set['en']['static_pages']['company']['description']

【问题讨论】:

    标签: ruby vagrant yaml vagrantfile


    【解决方案1】:

    正如他们在帖子的回答中所说的那样

    然后以站点名称作为参数调用相应的视图

    所以你在加载yaml文件后不会直接得到预期的字符串,你需要匹配参数。您可以在 Vagrantfile 中进行此操作的一种方法是

    require 'yaml'
    set = YAML.load_file(ENV['DEVOPS_HOME'] + '/vagrant/server/settings.yml')
    str = set['en']['static_pages']['company']['description']
    arg = {:site_name=> set['en']['site_name']}
    p str % arg
    

    将打印出"Site Name is an online system"

    另一种方法是使用 mudasobwa 的答案,您参考的原始帖子中也有详细说明

    【讨论】:

    • 你又一次帮助了我@Frédéric!谢谢你,小伙伴! :)
    • 欢迎 Valter - 根据您的用例,另一个更简单,但如果字符串中间有变量,则连接将不起作用并且需要解析参数,例如,如果您有字符串 'welcome on %{site_name} - we are online !' 一个简单的连接不会在特定位置生成参数,如果你有多个变量,使用参数可能比使用参数更好加入
    【解决方案2】:

    您可能希望使用YAML aliases 来实现此功能:

    en:
      site_name: &site_name "Site Name" # declaring alias
      static_pages:
        company:
          description: 
            - *site_name                # reference
            - "is an online system"
    

    后来:

    puts set['en']['static_pages']['company']['description'].join(' ')
    

    【讨论】:

    • 我读过关于aliases 的文章,但我没明白。但是通过你的例子我可以理解它。谢谢@mudasobwa!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2021-11-10
    • 2011-01-17
    • 2021-07-07
    • 2022-06-17
    • 2021-12-09
    • 2012-12-05
    相关资源
    最近更新 更多