【问题标题】:How can I define environment variables locally and not change their definitions/push them to heroku?如何在本地定义环境变量而不更改它们的定义/将它们推送到 heroku?
【发布时间】:2012-03-14 00:18:50
【问题描述】:

为了将我的应用程序连接到 amazon s3 和其他服务,我必须处理许多凭据。

我用 s3 启动并运行了我的 heroku 应用程序,它运行良好。我按照这个例子定义了我的 s3 访问凭证:http://devcenter.heroku.com/articles/config-vars

但是,我现在希望能够从我的本地开发环境访问 s3。显然,我在 heroku 上定义的配置变量在我的本地主机上不可用。如何在本地定义这些键?另外,我特别在寻找一种安全的解决方案(例如,如果我在初始化程序或其他东西中以纯文本定义我的密钥,我不希望将该文件推送到 heroku)。

作为背景,这是我添加到模型中以使回形针与 s3 一起运行的内容

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

【问题讨论】:

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


    【解决方案1】:

    如果您不想共享它,定义此类内容的最佳位置可能是初始化程序。

    # config/initializers/s3_constants.rb
    
    
    if Rails.env.development?
      S3_KEY = "mys3key"
      S3_SECRET = "mys3secret"
    end
    

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

    实际上,每个环境不同的常量应该真正位于该环境的文件中(例如 development.rb 这里)......但这些文件也应该真正添加到您的版本控制系统中,并且如果您绝对,绝对希望从 git 中排除这些数据,那么您最好不要提交一个单独的文件。

    【讨论】:

    • 这绝对是最好的方法。不过,我宁愿测试环境不是“生产”。所以它也适用于您的测试。
    • 如果你是 git 忽略文件,生产服务器如何知道环境变量? gitignored 文件是否仍会传递到服务器?
    【解决方案2】:

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

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

    另外,也许您想将名称更改为更具体的名称,以便您可以定义多个 s3 连接...

    【讨论】:

      【解决方案3】:

      heroku 提供 heroku config:add 并且您提供 KEY=value。请参阅配置变量文档

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        • 2013-07-25
        • 2020-09-19
        • 2017-03-24
        相关资源
        最近更新 更多