【问题标题】:uninitialized constant Yaml (NameError) using ruby2.1.2使用 ruby​​2.1.2 的未初始化常量 Yaml (NameError)
【发布时间】:2014-11-11 06:56:40
【问题描述】:

我是红宝石新手。 我想使用简单的 yml 设置文件 这是我的代码

启动EC2s.rb

#!/usr/bin/ruby
require 'rubygems'
require 'aws-sdk'
require 'yaml'
AWS_CON = Yaml.load_file("AWSsettings.yml") unless defined? AWS_CON

def launchEC2(count)
key_pair = ec2.key_pairs[AWS_CON['key_pair']]
    image_id
ec2 = AWS::EC2.new.regions[AWS_CON['region']]
instances = ec2.instances.create(
    :image_id => AWS_CON['image_id'],
    :instance_type => AWS_CON['instance_type'],
    :count => count,
    :security_groups => AWS_CON['security_groups'],
    :key_pair => key_pair)
end
launchEC2(2)

我的 yml 文件看起来像

# AWS yml file
key_pair: xxx
region: us-west-2
image_id: ami-b5a7ea85
instance_type: t2.micro
security_groups: xxx

当我运行它时,我得到了

./LaunchEC2s.rb:6:in `<main>': uninitialized constant Yaml (NameError)

对不起,这个问题很愚蠢,但我想不通 我做错了什么?

【问题讨论】:

  • 尝试所有大写的 'Yaml' 所以它应该是 'YAML'

标签: ruby amazon-web-services yaml


【解决方案1】:

我很确定您想使用 YAML.load_file("AWSsettings.yml") 而不是 Yaml.load_file("AWSsettings.yml")(区别是全部大写)。

【讨论】:

    【解决方案2】:

    试试这个: 在config/中创建一个yml文件

    说配置/ec2_keys.yml

    development: 
     region: us-west-2
     image_id: ami-b5a7ea85
     instance_type: t2.micro
     security_groups: xxx
    

    现在您想一劳永逸地初始化它们。为此创建这一行文件: config/initializers/load_ec2.rb

    EC2 = YAML.load(ERB.new(File.read("#{Rails.root.to_s}/config/ec2_keys.yml")).result)[Rails.env]
    

    现在在需要的地方使用常量:

    EC2["region"]
    #=> "us-west-2"
    EC2["image_id"]
    #=> "ami-b5a7ea85"
    

    【讨论】:

    • 好主意,我也试试 :)
    • 当然。 :) 在我看来,如果常量在不同的文件中多次使用,它们应该总是在应用程序加载时初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    相关资源
    最近更新 更多