如何在Ruby on Rails中为我的开发和生产环境设置不同的api密钥?

时间:2012-08-15 02:55:49

标签: ruby-on-rails development-environment

我正在进行一些涉及Stripe API的开发。在我的开发环境中,我正在使用条带测试密钥。在生产中我使用真正的api密钥,以便我可以处理真正的事务。

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

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

我更喜欢使用yetting

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

安装宝石后。你可以在config目录中创建一个yetting.yml文件。

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

答案 2 :(得分: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

有关其他示例,请查看此question

答案 3 :(得分: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