2016-03-06 3 views
0

У меня есть файл aws_helper.rbрубин поведение объекта при использовании тумана и методы AWS

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 

Если я использую класс из другого файла, скажем test.rb

require_relative 'aws_helper.rb' 
connection = Aws_Helper.new() 
connection.zones.get("ZXASDFS443") 
p connection 

Я получаю ошибку ,

неопределенный метод `зоны для # (NoMethodError)

Но из файла aws_helper.rb, если я это делаю @ connection.zone.get ("ZXASDFS443"), это отлично работает.

Что я здесь делаю неправильно?

+0

Если вы не можете что-то понять (как вы сами утверждаете), вам никто не может помочь. Невозможность понять что-то отличается от того, что не понимает что-то (что также не нужно указывать, поскольку вы не должны спрашивать здесь, не отвечая самим себе, если вы это сделаете). Пожалуйста, оставьте безрезультатные (и, надеюсь, неверные) заявления и приветствия. – Anthon

+0

Я думал, что это технический форум. Не думал, что мне нужно быть хорошим на английском, чтобы публиковать вопросы здесь. Я не являюсь носителем английского языка, поэтому извините меня за любую неправильную фразу, которую я использовал. Я просто хотел, чтобы я не мог понять, почему этот объект соединения не работает в описанном выше сценарии. – Tintu

+0

Это не технический форум, это сайт Q & A, который пытается создать высококачественную базу данных Q & A. Одно из различий с форумом - просвещение друг друга о том, как внести вклад в качество базы данных посредством редактирования и комментариев (особенно для новых участников). Я тоже не носитель языка, и если бы ваш английский был проблемой, я бы прокомментировал непоследовательное использование «I»/«i» в середине предложения. – Anthon

ответ

1

Я думаю, проблема связана с тем, как initialize работает в Ruby, что немного странно. В частности, в отличие от большинства других методов, initialize игнорирует предоставленное возвращаемое значение. Он ВСЕГДА возвращает экземпляр класса, на котором он определен. Поэтому в этом случае вы получите экземпляр Aws_Helper (вместо ссылки на само соединение). Если вы измените имя метода там на что-то вроде connect, оно должно работать так, как вы его изложили.