jay
jay

Reputation: 12495

How can I define environment variables locally and not change their definitions/push them to heroku?

I have many credentials that I have to handle in order to hook my app up to amazon s3 and other services.

I got my heroku app up and running with s3, and it works great. I defined my s3 access credentials following this example: http://devcenter.heroku.com/articles/config-vars

However, I want now to be able to have access to s3 from my local development environment. Obviously, the config vars that I defined on heroku aren't available on my localhost. How can I define these keys locally? Also, I'm looking in particular for a solution that is secure (for example if I define my keys in plain text in an intializer or something, I don't want that file to be pushed on heroku).

For background, here is what I add to my model to get paperclip running with s3

 has_attached_file :photo,
:storage => :s3,
:bucket => 'bucket_name',
:s3_credentials => {
  :access_key_id => ENV['S3_KEY'],
  :secret_access_key => ENV['S3_SECRET']
}

Upvotes: 8

Views: 3483

Answers (3)

WattsInABox
WattsInABox

Reputation: 4636

Just define the environment variables in your .bash_profile file like any other environment variable. Maybe leave a comment to demarcate the section as Rails-specific environment variables.

#~/.bash_profile
# Rails constants
S3_KEY="blady"
S3_SECRET="bladybloo123"

Also, maybe you want to change the name to something more specific so that you can have more than one s3 connection defined...

Upvotes: 2

rhodee
rhodee

Reputation: 1267

heroku provides heroku config:add and you provide KEY=value. see config vars documentation

Upvotes: -1

Veraticus
Veraticus

Reputation: 16074

The best place to define stuff like this, if you don't want it shared, is probably an initializer.

# config/initializers/s3_constants.rb


if Rails.env.development?
  S3_KEY = "mys3key"
  S3_SECRET = "mys3secret"
end

Ensure this file is added to .gitignore so it won't be pushed along with the rest of your repository.

Realistically speaking, constants that differ on a per-environment basis should really be located in the file for that environment (say development.rb here)... but those files should also really be added to your version control system, and if you definitely, definitely want this data excluded from git, then a separate file that you do not commit is probably your best bet.

Upvotes: 10

Related Questions