1

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

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

4

4 回答 4

9

在 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]
于 2014-06-26T13:23:55.987 回答
2

我更喜欢使用Yetting

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

一旦安装了gem。您可以在 config 目录中创建一个 Yetting.yml 文件。

development:
  facebook_app_id: xxxxxx
staging:
  facebook_app_id: xxxxxx
production:
  facebook_app_id: xxxxxx
于 2012-08-15T04:30:17.643 回答
1

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

快速简单,看看Rails.env

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

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

配置/环境/development.rb

config.api_key = "my dev api key"

配置/环境/production.rb

config.api_key = "my prod api key"

访问您的密钥

MyApp::Application.config.api_key

查看此问题以获取其他示例。

于 2012-08-15T03:17:20.697 回答
1

我就是这样做的:

在 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
于 2012-08-15T06:10:50.240 回答