【问题标题】:How do I set different api keys for my development and production environments in Ruby on Rails?如何在 Ruby on Rails 中为我的开发和生产环境设置不同的 api 密钥?
【发布时间】:2012-08-11 09:47:37
【问题描述】:

我正在做一些涉及 Stripe API 的开发。在我的开发环境中,我正在使用我的条带测试密钥。在生产中,我使用的是真正的 api 密钥,这样我当然可以处理真实的交易。

我目前只是在部署到生产环境之前立即更改测试 api 密钥;这感觉不是很好。我很确定可行的策略是使用 gitignore 创建一个开发分支(忽略加载 api 密钥的初始化程序),然后在部署之前将其与主分支合并;这样,api 密钥在各自的环境中总是正确的。不过我不太喜欢这种方法。是否有某种方法可以在某处配置这些 api 密钥,以便应用程序只知道在 dev/prod 中使用哪一个?

【问题讨论】:

    标签: ruby-on-rails development-environment


    【解决方案1】:

    给这只猫剥皮的方法有很多。

    快速简单,看Rails.env

    它将返回服务器运行的环境。 您只需要相应地设置密钥。

    我真正推荐的方法是使用yaml 文件或使用Rails.application.config 创建应用程序配置变量

    config/environments/development.rb

    config.api_key = "my dev api key"
    

    config/environments/production.rb

    config.api_key = "my prod api key"
    

    访问您的密钥

    MyApp::Application.config.api_key
    

    查看question 了解其他示例。

    【讨论】:

      【解决方案2】:

      我更喜欢使用yetting

      虽然将 API 密钥添加到环境文件中可以完成工作,但将它们添加到单独的文件中对我来说似乎是一种更简洁和抽象的方式。

      一旦安装了 gem。你可以在config目录下创建一个yetting.yml文件。

      development:
        facebook_app_id: xxxxxx
      staging:
        facebook_app_id: xxxxxx
      production:
        facebook_app_id: xxxxxx
      

      【讨论】:

        【解决方案3】:

        这就是我的做法:

        在 config/initializers/stripe.rb 中

        if(Rails.env == 'development' || Rails.env == 'staging')
          Stripe.api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
          STRIPE_PUBLIC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
        elsif(Rails.env == 'production')
          Stripe.api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
          STRIPE_PUBLIC_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
        end
        

        【讨论】:

        • 这行得通,但它不会遵循最佳实践:当您将代码提交到共享存储库时会发生什么?您的整个团队都可以使用生产密钥。生产密钥应在环境 (ENV) 中设置。
        【解决方案4】:

        在 Rails 4.1 中,我们有 config/secrets.yml 文件,因此您可以在其中设置 api 密钥,如下所示:

        development:
          secret_key_base: 'xxx'
          publishable_key: xxx
          secret_key: xxx
        production:
          secret_key_base: 'xxx'
          publishable_key: xxx
          secret_key: xxx
        

        在您的 stripe.rb 文件中,您可以这样做:

        Rails.configuration.stripe = {
          :publishable_key => Rails.application.secrets.publishable_key,
          :secret_key      => Rails.application.secrets.secret_key
        }
        
        Stripe.api_key = Rails.configuration.stripe[:secret_key]
        

        【讨论】:

          猜你喜欢
          • 2017-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-14
          • 2011-03-20
          • 2014-04-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多