如何在本地定义环境变量而不更改其定义/将它们推送到heroku?

时间:2012-02-23 15:11:53

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 environment-variables

我需要处理许多凭据才能将我的应用程序连接到amazon s3和其他服务。

我使用s3运行了我的heroku应用程序,它运行良好。我按照此示例定义了我的s3访问凭据:http://devcenter.heroku.com/articles/config-vars

但是,我现在希望能够从本地开发环境访问s3。显然,我在heroku上定义的配置变量在我的localhost上不可用。如何在本地定义这些密钥?此外,我正在寻找一个安全的解决方案(例如,如果我在一个初始化器中以纯文本形式定义我的密钥,我不希望该文件被推送到heroku)。

对于背景,这是我添加到模型中以使用s3

运行paperclip的内容
 has_attached_file :photo,
:storage => :s3,
:bucket => 'bucket_name',
:s3_credentials => {
  :access_key_id => ENV['S3_KEY'],
  :secret_access_key => ENV['S3_SECRET']
}

3 个答案:

答案 0 :(得分:10)

定义这样的东西的最佳位置,如果你不想共享它,可能是初始化器。

# config/initializers/s3_constants.rb


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

确保将此文件添加到.gitignore中,以便它不会与存储库的其余部分一起推送。

实际上,在每个环境基础上不同的常量应该真正位于该环境的文件中(比如说这里的development.rb)......但是这些文件也应该真正添加到你的版本控制系统中,并且如果你肯定,绝对希望从git中排除这些数据,那么你不提交的单独文件可能是你最好的选择。

答案 1 :(得分:2)

只需在.bash_profile文件中定义环境变量,就像任何其他环境变量一样。也许留下评论将该部分划分为特定于Rails的环境变量。

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

此外,您可能希望将名称更改为更具体的名称,以便您可以定义多个s3连接...

答案 2 :(得分:-1)

heroku提供heroku配置:添加并提供KEY =值。请参阅config vars文档