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 之类的名称,它应该会按照您布置的方式工作。