4

すべてのRubyGemのバージョン。私はRuby on Rails 3.1.3、Ruby 1.9.2、CarrierWave 0.5.8、およびFog 1.1.2を使用しています。霧とAmazon S3の公開URL

画像のアップロードにはCarrierWave RubyGem、Amazon S3ファイルアップロード用のFog RubyGemを使用しています。私CarrierWaveの初期化ファイルで

は私が持っている:私は2つのアップローダーファイルを持っています

class PageAttachmentUploader < CarrierWave::Uploader::Base 
CarrierWave.configure do |config| 
    if Rails.env.development? || Rails.env.development? || Rails.env.production? 
    config.fog_public = true 
    end 
    end 

storage :fog 
end 

CarrierWave.configure do |config| 
config.fog_credentials = { 
    provider: 'AWS', 
    aws_access_key_id: 'xxx', 
    aws_secret_access_key: 'xxx' 
    } 
    if Rails.env.production? 
    config.fog_directory = 'bucket1' 
    elsif Rails.env.development? 
    config.fog_directory = 'bucket2' 
    else 
    config.fog_directory = 'bucket3' 
    end 

    config.fog_public = false 
    config.fog_authenticated_url_expiration = 60 
end 

私はアップローダーファイルを持っています。私は1つをプライベートに設定し、1つをパブリックに設定します。

PageAttachmentUploaderが呼び出されたときにCarrierWave設定を上書きしようとしていて、URLをpublicに設定しています。これはローカルマシンのチャームのように機能しますが、ステージング、サンドボックス、プロダクションでは機能しません。

私は、CarrierWaveイニシャライザでconfig.fog_public = trueを変更しました。それでも、サンドボックスでは機能しません。この問題を解決するにはどうすればよいですか?

答えて

23

いいえ、それぞれのアップローダだけでなく、すべてのアップローダのデフォルト設定を変更するため、アップローダでCarrierWave.configureを直接使用しないでください。

それが最善の解決策だ場合、私は知りませんが、あなたはこのようなあなたのアップローダでクラスメソッドを設定することで、デフォルトの霧の設定を直接変更することができます:実際に

class ImageUploader < CarrierWave::Uploader::Base 
    storage :fog 

    def self.fog_public 
    true # or false 
    end 
end 
+0

うん、それは正しい! fog_public:私のために働いたアップローダーファイルの真。ありがとう! – user1286523

+1

OK、この回答に投票するのを忘れないでください:)! –

+0

私のために働いていない –

1

、最良の方法(私が見つけました)は次のようにすることです:

このようにするにはCarrierWaveのスタイルに沿ってもっと感じます。

関連する問題