是否有可能将红宝石哈希从一个文件读取到另一个文件,然后使用其值?

问题描述 投票:0回答:1

背景

我有一个项目结构,其中有一个.rb文件,该文件包含哈希中的数据,而哈希不是文件中唯一的内容:

name "vm"
description "Configuration file for the Demo VM"
default_attributes(
    custom_demo: {
        verticals: {
            fashion: true,
            automotive: false,
            fsi: false,
            custom: true
        },
        channels: {
            b2b: true,
            b2c: true
        },
        geos: [
            'us_en'
        ]
    },
    infrastructure: {
        php: {
            version: '7.3',
            port: 9000
        },
        webserver: {
            http_port: 80,
            ssl_port: 443
        },
        database: {
            user: 'magento',
            password: 'password',
            name: 'magento'
        },
        elasticsearch: {
            use: true,
            version: '6.x',
            memory: '1g',
            port: 9200,
            plugins: ['analysis-phonetic', 'analysis-icu']
        },
        mailhog: {
            use: true,
            port: 10000
        },
        webmin: {
            use: true,
            port: 20000
        },
        samba: {
            use: true,
            shares: {
                composer_credentials: true,
                image_drop: true,
                web_root: true,
                app_modules: true,
                multisite_configuration: true,
                app_design: true
            }
        }
    }

在另一个ruby脚本中,我需要使用此default_attributes哈希中的值来做其他事情。

我的问题

在另一个ruby脚本中使用上述ruby哈希的最佳方法是什么?

我尝试过的

[首先,我尝试使用load()只是使用哈希将文件“装入”。由于前两行,这引发了一个问题:

name "vm"
description "Configuration file for the Demo VM"

所以,我想我会以字符串或数组的形式读取它,并跳过前两行:

data_string = ''
data = File.readlines(File.dirname(File.expand_path(__FILE__)) + '/environments/vm.rb').drop(2).each do |line| 
  data_string += line
end
data_hash = JSON.parse(data_string)
print data_hash

[这种方法做了两件我不喜欢的事情:首先,它把结果打印到屏幕上,其次,它的输出错误是:

/opt/vagrant/embedded/lib/ruby/2.4.0/json/common.rb:156:in `parse': 751: unexpected token at 'verticals: { (JSON::ParserError)

正是在这一点上,我开始怀疑自己的方法,并想知道我想做的事是否可能。为了澄清,理想情况下,在弄清楚如何在另一个脚本中解析上述文件之后,我将能够使用哈希中的某些内容,例如:

default_attributes[:infrastructure][:php][:version]
# => 7.3
ruby hash
1个回答
0
投票

尝试直接从此文件中读取散列是doable,但messy。我认为您应该改换角度。与其尝试直接从此文件中读取哈希值,不如将哈希值移至其自己的文件并从两个位置读取它。因此:

  1. 将哈希值放入自己的文件中:

    # my_hash.rb
    
    MyHash = {
      # put the hash content here
    }
    
  2. 从虚拟机配置文件加载:

    # vm_config.rb
    
    require_relative './my_hash.rb'
    name "vm"
    description "Configuration file for the Demo VM"
    default_attributes(MyHash)
    
  3. 同样也可以从任何其他文件加载它:

    # other_file.rb
    
    require_relative './my_hash.rb'
    puts MyHash
    # => hash will print, it has been loaded
    
© www.soinside.com 2019 - 2024. All rights reserved.