ruby 使用雾和 AWS 方法时的对象行为
ruby object behavior while using fog and AWS methods
我有一个 aws_helper.rb 文件
require 'yaml'
require 'fog'
class Aws_Helper
def initialize()
conf = YAML::load_file("config.yml")
@connection = Fog::DNS.new( :provider=> 'aws',
:aws_access_key_id => conf['aws_access_key'],
:aws_secret_access_key => conf['aws_secret_key']
)
return @connetion
end
end
如果我使用另一个文件中的 class,请说 test.rb
require_relative 'aws_helper.rb'
connection = Aws_Helper.new()
connection.zones.get("ZXASDFS443")
p connection
我收到错误,
undefined method `zones' for # (NoMethodError)
但是从 aws_helper.rb 文件本身,如果我这样做 @connection.zone.get("ZXASDFS443") 这工作正常。
我这里做错了什么?
我认为问题出在 initialize
在 Ruby 中的工作方式,这有点奇怪。特别是,与大多数其他方法不同,initialize
忽略提供的 return 值。它总是 return 它所定义的 class 的一个实例。所以在这种情况下,你会得到一个 Aws_Helper 实例(而不是对连接本身的引用)。如果您将那里的方法名称更改为 connect
之类的名称,它应该会按照您布置的方式工作。
我有一个 aws_helper.rb 文件
require 'yaml'
require 'fog'
class Aws_Helper
def initialize()
conf = YAML::load_file("config.yml")
@connection = Fog::DNS.new( :provider=> 'aws',
:aws_access_key_id => conf['aws_access_key'],
:aws_secret_access_key => conf['aws_secret_key']
)
return @connetion
end
end
如果我使用另一个文件中的 class,请说 test.rb
require_relative 'aws_helper.rb'
connection = Aws_Helper.new()
connection.zones.get("ZXASDFS443")
p connection
我收到错误,
undefined method `zones' for # (NoMethodError)
但是从 aws_helper.rb 文件本身,如果我这样做 @connection.zone.get("ZXASDFS443") 这工作正常。
我这里做错了什么?
我认为问题出在 initialize
在 Ruby 中的工作方式,这有点奇怪。特别是,与大多数其他方法不同,initialize
忽略提供的 return 值。它总是 return 它所定义的 class 的一个实例。所以在这种情况下,你会得到一个 Aws_Helper 实例(而不是对连接本身的引用)。如果您将那里的方法名称更改为 connect
之类的名称,它应该会按照您布置的方式工作。