2013-01-21 2 views
0

나는 AWS S3 gem을 사용하는 클래스가 있으며,이 클래스를 사용하는 클래스에는 여러 가지 메소드가 있습니다. 내 문제는 여러 위치에서 구성하는 것이 아니라 내 개체의 속성으로 만들고 싶습니다.객체 속성이있는 Ruby 객체

PHP에서는 이렇게합니다.

<?php 
    class myClass { 

    private $obj; 

    public function __construct() { 
     $this->obj = new Object(); 
    } 
    } 
?> 

그리고 나서 myClass의 $ this-> obj-> method()를 사용할 수 있습니다.

나는 루비에서 비슷한 결과를 얻지 못하고있다.

내 시나리오는 이와 유사합니다. 나는 또한 실행되지 초기화 내 수업에 나타났습니다

require 'aws/s3' 

class ProfileVideo < ActiveRecord::Base 

    def self.cleanup 

    # <snip> YAML load my config etc etc 

    AWS::S3::Base.establish_connection!(
     :access_key_id  => @aws_config['aws_key'], 
     :secret_access_key => @aws_config['aws_secret'] 
    )  

    end 

    def self.another_method 
    # I want to use AWS::S3 here without needing to establish connection again 
    end 

end 

이 - 간단한 '은 "여기"두고'아무것도하지 않는다. 이것이 레이크 작업이고 다른 방법으로 여기에 넣을 수 있다고 생각하십시오. 레이크가 ProfileVideo.new를 실행하는 것처럼 초기화되지 않는다면 나는 확신하지 못합니다.

어쨌든, 미리 감사드립니다.

답변

2

나는 특히 S3 보석에 익숙하지 않지만 여기에 대해 당신이 갈 수있는 몇 가지 방법이 있습니다.

def open_s3 
    return if @s3_opened 
    AWS::S3::Base.establish_connection!(
    :access_key_id  => @aws_config['aws_key'], 
    :secret_access_key => @aws_config['aws_secret'] 
) 
    @s3_opened = true 
end 

는 당신이 필요한 모든 방법의 상단에 open_s3를 호출 할 수 있으며, 그것은 것입니다 :

단순히 연결을 쉽게 구축 확인하려면, 당신은 다음처럼 모델의 방법을 만들 수 있습니다 한 번만 열어 라.

당신이 취할 수있는 또 다른 경로는 다른 후크 (IIRC, 정의하는 순서에 따라 발주 순서가 정해진 다) 전에 호출하기 위해 이전 후크 세트에 연결 코드를 배치 한 다음 호출하는 것입니다.

두 경우 모두 AWS 키와 암호를 코드에 삽입하지 않는 것이 좋습니다. 대신, 설정 파일에 들어가야하는 것은 버전 제어 시스템에 의해 무시되고 원격 시스템을위한 on-deploy를 생성합니다.

+0

안녕하세요, Seth 님, 고마워요.하지만 빠른 질문 - 객체 (보석)를 만드는 것 - 런타임 중에 내 객체 (myClass) 전체에 지속성이 있습니까? 즉, 다시 만들 필요없이 myClass에서 S3 보석의 메서드를 실행할 수 있습니까? (config는 config 디렉토리에있는 .yml에 있는데, 이것은 git에 의해 무시됩니다.) 다시 한번 감사드립니다. – Christian

+0

@Christian - 보석 페이지의 예제를 다시 보면 ActiveRecord 연결과 마찬가지로 연결이 열렸으며 요청이 완료 될 때까지 (즉 페이지가 사용자에게 반환 될 때까지) 연결이 유지되어야합니다. S3 계정이 없으므로 직접 테스트 할 수 없습니다. –