Skip to content

Instantly share code, notes, and snippets.

@hernan
Forked from gshaw/carrier_wave.rb
Created April 19, 2016 22:57
Show Gist options
  • Save hernan/64268eb96e40d56fdca2885ff8e253ce to your computer and use it in GitHub Desktop.
Save hernan/64268eb96e40d56fdca2885ff8e253ce to your computer and use it in GitHub Desktop.

Revisions

  1. @gshaw gshaw created this gist Aug 14, 2014.
    68 changes: 68 additions & 0 deletions carrier_wave.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    # NullStorage provider for CarrierWave for use in tests. Doesn't actually
    # upload or store files but allows test to pass as if files were stored and
    # the use of fixtures.
    class NullStorage
    attr_reader :uploader

    def initialize(uploader)
    @uploader = uploader
    end

    def identifier
    uploader.filename
    end

    def store!(_file)
    true
    end

    def retrieve!(_identifier)
    true
    end
    end

    CarrierWave.configure do |config|
    # Make the tmp dir work on Heroku
    config.cache_dir = "#{Rails.root}/tmp/uploads"

    if Rails.env.production? || Rails.env.staging?
    config.storage :fog
    config.fog_credentials = {
    provider: "AWS",
    # When precompiling assets Fog will be initialized and needs to be
    # initialized (even though it will never touch S3), provide some values
    # to prevent Fog gem from crashing during initialize wihtout actually
    # giving away the keys.
    aws_access_key_id: ENV["S3_KEY"] || "S3_KEY",
    aws_secret_access_key: ENV["S3_SECRET"] || "S3_SECRET"
    }

    config.fog_directory = ENV["S3_BUCKET"]
    # App requires explicit protocol to be specified for uploaded assets
    # Do not change to "//..." like we are doing with the other asset hosts
    config.asset_host = "https://#{ENV["S3_CDN_HOST"]}"
    config.fog_attributes = { "Cache-Control" => "max-age=315576000" }

    elsif Rails.env.development?
    config.storage :file
    config.asset_host = "http://#{ENV["S3_CDN_HOST"] || ENV["HOST"]}"

    elsif Rails.env.test?
    config.storage NullStorage
    # Required to prevent FactoryGirl from giving an infuriating exception
    # ArgumentError: wrong exec option
    # It also speeds up tests so it's a good idea
    config.enable_processing = false
    end
    end

    # https://gist.github.com/1058477
    module CarrierWave::MiniMagick
    def quality(percentage)
    manipulate! do |img|
    img.quality(percentage.to_s)
    img = yield(img) if block_given?
    img
    end
    end
    end