0.0
No commit activity in last 3 years
No release in over 3 years
Tempfile creation directly on cloud storage (S3, Google, Rackspace etc] which can be utilized in a Ruby application
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 1.0
>= 2.1.1
>= 0
>= 0
>= 0

Runtime

>= 1.36.0
 Project Readme

Build Status Code Climate Gem Version

CloudTempfile

Tempfile creation directly on Amazon S3 which can be utilized by a Ruby on Rails application.

This was initially built and is intended to work on Heroku but can work on any platform.

Installation

Add the gem to your Gemfile

gem 'cloud_tempfile'

Configuration

CloudTempfile

CloudTempfile supports the following methods of configuration.

  • Built-in Initializer (configured through environment variables)
  • Rails Initializer
  • A YAML config file

Using the Built-in Initializer is the default method and is supposed to be used with environment variables. It's the recommended approach for deployments on Heroku.

If you need more control over configuration you will want to use a custom rails initializer.

Configuration using a YAML file (a common strategy for Capistrano deployments) is also supported.

The recommend way to configure cloud_tempfile is by using environment variables however it's up to you, it will work fine if you hard code them too. The main reason is that then your access keys are not checked into version control.

Built-in Initializer (Environment Variables)

The Built-in Initializer will configure CloudTempfile based on the contents of your environment variables.

Add your configuration details to heroku

heroku config:add AWS_ACCESS_KEY_ID=xxxx
heroku config:add AWS_SECRET_ACCESS_KEY=xxxx
heroku config:add FOG_DIRECTORY=xxxx
heroku config:add FOG_PROVIDER=AWS
# and optionally:
heroku config:add FOG_REGION=eu-west-1

Or add to a traditional unix system

export AWS_ACCESS_KEY_ID=xxxx
export AWS_SECRET_ACCESS_KEY=xxxx
export FOG_DIRECTORY=xxxx

Rackspace configuration is also supported

heroku config:add RACKSPACE_USERNAME=xxxx
heroku config:add RACKSPACE_API_KEY=xxxx
heroku config:add FOG_DIRECTORY=xxxx
heroku config:add FOG_PROVIDER=Rackspace

Google Storage Cloud configuration is supported as well

heroku config:add FOG_PROVIDER=Google
heroku config:add GOOGLE_STORAGE_ACCESS_KEY_ID=xxxx
heroku config:add GOOGLE_STORAGE_SECRET_ACCESS_KEY=xxxx
heroku config:add FOG_DIRECTORY=xxxx

Custom Rails Initializer (config/initializers/cloud_tempfile.rb)

If you want to enable some of the advanced configuration options you will want to create your own initializer.

Run the included Rake task to generate a starting point.

rails g cloud_tempfile:install --provider=Rackspace
rails g cloud_tempfile:install --provider=AWS

The generator will create a Rails initializer at config/initializers/cloud_tempfile.rb.

CloudTempfile.configure do |config|
  config.enabled = true
  config.fog_provider = 'AWS'
  config.fog_directory = ENV['FOG_DIRECTORY']
  config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID']
  config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']

  # Increase upload performance by configuring your region
  # config.fog_region = 'eu-west-1'
  #
  # Fail silently.  Useful for environments such as Heroku
  # config.fail_silently = true
end

YAML (config/cloud_tempfile.yml)

Run the included Rake task to generate a starting point.

rails g cloud_tempfile:install --use-yml --provider=Rackspace
rails g cloud_tempfile:install --use-yml --provider=AWS

The generator will create a YAML file at config/cloud_tempfile.yml.

defaults: &defaults
  enabled: true
  fog_provider: "AWS"
  fog_directory: "rails-app-assets"
  aws_access_key_id: "<%= ENV['AWS_ACCESS_KEY_ID'] %>"
  aws_secret_access_key: "<%= ENV['AWS_SECRET_ACCESS_KEY'] %>"
  # To use AWS reduced redundancy storage.
  # (http://aws.amazon.com/about-aws/whats-new/2010/05/19/announcing-amazon-s3-reduced-redundancy-storage/)
  # aws_reduced_redundancy: true
  # You may need to specify what region your storage bucket is in
  # fog_region: "eu-west-1"
  # Fail silently.  Useful for environments such as Heroku
  # fail_silently: true

development:
  enabled: true

test:
  enabled: true

production:
  <<: *defaults

Available Configuration Options

All CloudTempfile configuration can be modified directly using environment variables with the Built-in initializer. e.g.

CloudTempfile.config.fog_provider == ENV['FOG_PROVIDER']

CloudTempfile (optional)

  • enabled: (true, false) when false, will disable CloudTempfile and local Tempfile will be created instead.
  • default: 'true' (enabled)

Fog (Required)

  • fog_provider: your storage provider AWS (S3) or Rackspace (Cloud Files) or Google (Google Storage)
  • fog_directory: your bucket name

Fog (Optional)

  • fog_region: the region your storage bucket is in e.g. eu-west-1

AWS

  • aws_access_key_id: your Amazon S3 access key
  • aws_secret_access_key: your Amazon S3 access secret

Rackspace

  • rackspace_username: your Rackspace username
  • rackspace_api_key: your Rackspace API Key.

Google Storage

  • google_storage_access_key_id: your Google Storage access key
  • google_storage_secret_access_key: your Google Storage access secret

Rackspace (Optional)

  • rackspace_auth_url: Rackspace auth URL, for Rackspace London use: https://lon.identity.api.rackspacecloud.com/v2.0

Amazon S3 Multiple Region Support

If you are using anything other than the US buckets with S3 then you'll want to set the region. For example with an EU bucket you could set the following environment variable.

heroku config:add FOG_REGION=eu-west-1

Or via a custom initializer

CloudTempfile.configure do |config|
  # ...
  config.fog_region = 'eu-west-1'
end

Or via YAML

production:
  # ...
  fog_region: 'eu-west-1'

Rake Task

A rake task is included within the cloud_tempfile gem to perform the clean up:

    namespace :cloud_tempfile do
      desc "Clean up expired temp files from the remote storage"
      task :clear => :environment do
        CloudTempfile.clear
      end
    end

Packaging and Contributing

To automate the packaging of this gem, please use Jeweler

Todo

  1. Support more cloud storage providers
  2. Better test coverage

Credits

Inspired by:

License

MIT License. Copyright 2014 Kevin Bolduc.