2011-06-27 13 views
2

私は次のファイルにデータを保存しています:それはどのデータですか? :)コンソールからRuby on Rails Rails.root.join ymlファイルにどのようにアクセスしますか?

S3_CREDENTIALS = Rails.root.join("config/s3.yml") 

それが働いて確認するため、私はレールコンソールを解雇し、S3_CREDENTIALSは、パス名オブジェクトである見つけました。しかし、私はデータがそこにあることを確認するのに問題があります。たとえば、バケットデータにどのようにアクセスすればよいですか?関連ノートで

Loading development environment (Rails 3.1.0.beta1) 
>> S3_CREDENTIALS.isdir 
NoMethodError: undefined method `isdir' for #<Pathname:0x10212f6f8> 
    from (irb):1 
>> S3_CREDENTIALS.size 
=> 282 
>> S3_CREDENTIALS.data 
NoMethodError: undefined method `data' for #<Pathname:0x10212f6f8> 
    from (irb):3 
>> S3_CREDENTIALS[:bucket] 
NoMethodError: undefined method `[]' for #<Pathname:0x10212f6f8> 
    from (irb):4 
>> 

私はs3.jsonするs3.ymlからファイルを変更した場合、これはまだ動作しますか?

答えて

3

これをPaperclipでs3ストレージとして使用している場合は、ymlのままにしておきます。あなたの初期化子インサイド(設定/初期化子)と呼ばれるファイルを作成:すべてのあなたのS3のもののためにあなたの設定は、形式にする必要があり

app_config.rb

AppConfig = YAML.load(File.read(Rails.root + 'config' + 'config.yml'))[Rails.env].with_indifferent_access 

config.yml

development: 
    s3: 
    access_id: access-id 
    secret_key: secret 
    bucket_name: your-bucket-name-for-development 
staging: 
    s3: 
    access_id: access-id 
    secret_key: secret 
    bucket_name: your-bucket-name-for-staging 
production: 
    s3: 
    access_id: access-id 
    secret_key: secret 
    bucket_name: your-bucket-name-for-production 

この時点で、あなたはあなたのコンソールに入って、あなたのs3データにアクセスすることができます:

AppConfig[:s3] 

など、あなたはすべてのデータをバックハッシュを取得する必要があります:あなたが開発にあなたのS3のものをテストしたい場合、私はちょうど一例として、上記を持っていますが、通常、あなただけの節約になる

{"access_id"=>"access-id", "bucket_name"=>"your-bucket-name-for-development", "secret_key"=>"secret"} 

開発時にはローカルのファイルディレクトリに、リモートのステージング環境と運用環境にはs3を使用します。

バケットデータへのアクセスは、別の会話であり、バケットデータをモデルに関連付けた方法によって異なります。例えば、あなたのバケットデータはそうのような写真のモデルに関連していた場合は、次のデータを:

photo.rb

require 'paperclip' 

class Photo < ActiveRecord::Base 
    belongs_to :album 
    before_save :set_orientation 

    if AppConfig['s3'] 
    has_attached_file :data, 
     :styles => { 
     :thumb => "200x200>", 
     :medium => "700x700>" 
     }, 
     :storage => :s3, 
     :default_style => :medium, 
     :bucket => AppConfig['s3']['bucket_name'], 
     :s3_credentials => { :access_key_id => AppConfig['s3']['access_id'], :secret_access_key => AppConfig['s3']['secret_key'] }, 
     :s3_headers => { 'Cache-Control' => 'max-age=315576000', 'Expires' => 10.years.from_now.httpdate }, 
     :path => "/:class/:id/:style/:filename" 
    else 
    has_attached_file :data, 
     :styles => { 
     :thumb => "200x200>", 
     :medium => "700x700>" 
     }, 
     :storage => :filesystem, 
     :default_style => :medium 
    end 

    private 
    def set_orientation 
    self.orientation = Paperclip::Geometry.from_file(self.data.to_file).horizontal? ? 'horizontal' : 'vertical' 
    end 
end 

私はhas_attached_fileに示されるように、私の添付ファイル名は、データと呼ばれています。

Photo.first.data(:thumb) 

をそして、それはサムネイル写真が返された最初の写真のオブジェクトに格納したS3のURLを引くでしょう。だから、いくつかのバケットのデータにアクセスするために、私が呼び出します。上記の例では、 'paperclip' gemと 'aws-s3' gemも使用しています。

config.gem 'aws-s3', :version => '>=0.6.2', :lib => 'aws/s3' 
config.gem 'paperclip' 

あなたのお役に立てば幸いです。

関連する問題