4

Paperclipの代替品として、Carrierwaveで遊んでいます。Carrierwaveでの生産と開発にさまざまなS3バケットを使用する

私は初期化子で霧を設定する必要がありS3を使用するためにドキュメントから見ることができます:私は異なる環境に異なるバケットを設定するのですか、しかし

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS',  # required 
    :aws_access_key_id  => 'xxx',  # required 
    :aws_secret_access_key => 'yyy',  # required 
    :region     => 'eu-west-1' # optional, defaults to 'us-east-1' 
    } 

end 

? paperclipを使用すると、ymlファイルの開発/制作/ etcに異なる資格情報やバケットを指定します。キャリアウェーブでそれを行う最善の方法は何ですか?

したい場合は、この完全にテストされていないアイデアのように、ほとんどまったく同じようにそれを行うことができ

答えて

5

# config/initializers/carrierwave.rb 
CarrierWave.configure do |config| 
    my_config = "#{Rails.root}/config/fog_credentials.yml" 

    YAML.load_file(my_config)[Rails.env].each do |key, val| 
    config.send("#{key}=", val) 
    end 
end 

# config/fog_credentials.yml 
common: &common 
    aws_access_key: 'whatever' 
    ... 
    fog_credentials: 
    provider: 'whoever' 
    ... 
production: 
    <<: *common 
    fog_directory: 'my-production-bucket' 
development: 
    <<: *common 
    fog_directory: 'my-dev-bucket' 

それとも、YAMLを見送るしたい場合、あなたは常に単純で、環境のためにテストすることができ初期化子など最も単純なもので、ケースや条件を使用する:あなたはTestEnvironmentではなく、右を初期化するとき

CarrierWave.configure.do |config| 
    if Rails.env.development? 
    # configure one env 
    else 
    # configure another 
    end 

    # configure common stuff 
end 
+0

が、私はオプション2と使用して行くつもりです:

あなたも、このように行うことができます単純な条件文です。いいね。ありがとう! – deb

1
class S3ArticleUploader < CarrierWave::Uploader::Base 

    if Rails.env.test? 
    storage :file 
    else 
    storage :fog 
    end 

    def fog_directory 
    ARTICLE_UPLOADER_BUCKET 
    end 

    def store_dir 
    "#{ model.parent_id }/#{ model.id }" 
    end 

end 

# config/environments/development.rb 
ARTICLE_UPLOADER_BUCKET = 'development-articles' 

# config/environments/production.rb 
ARTICLE_UPLOADER_BUCKET = 'production-articles' 

fog_directoryメソッド呼び出し バケツ。私はあなたが示唆したようにYAMLファイルをロードテストしていない

def store_dir 
    if self._storage == CarrierWave::Storage::File 
     "#{Rails.root}/tmp/files/#{ model.parent_id }/#{ model.id }" 
    elsif self._storage == CarrierWave::Storage::Fog 
     "#{ model.parent_id }/#{ model.id }" 
    end 
    end 

V2

class S3ArticleUploader < CarrierWave::Uploader::Base 

    if Rails.env.test? 
    storage :file 
    else 
    storage :fog 
    end 

    def initialize 
    self.fog_directory = ARTICLE_UPLOADER_BUCKET 
    end 

    def store_dir 
    "#{ model.parent_id }/#{ model.id }" 
    end 

end 
関連する問題