Rails:Paypal配置文件和figaro环境变量

时间:2015-01-28 21:58:14

标签: ruby-on-rails paypal

我使用gem'paypal-sdk-adaptivepayments'将Paypal集成到我的Rails应用程序中。配置文件是paypal.yml:

development:
  # Credentials for Classic APIs 
  username: ENV["PAYPAL_CLASSIC_USERNAME_DEV"]
  password: ENV["PAYPAL_CLASSIC_PASSWORD_DEV"]
  signature: ENV["PAYPAL_CLASSIC_SIGNATURE_DEV"]
  app_id: ENV["PAYPAL_CLASSIC_APP_ID_DEV"]
  http_timeout: 30
  # Mode can be 'live' or 'sandbox'
  mode: sandbox
test:
  <<: *default
production:
  <<: *default
  #mode: live

因为这个信息是秘密的我想要使用另一个名为“Figaro”的gem来外化这些变量。我在我的应用程序中将此用于另一个配置文件,但它不适用于'paypal.yml'。我知道这不起作用,因为当我将真实信息放在paypal.yml文件中时,它可以工作。

development:
  # Credentials for Classic APIs 
  username: *******@yahoo.com
  password: *******
  signature: ******
  app_id: ******
  http_timeout: 30
  # Mode can be 'live' or 'sandbox'
  mode: sandbox
test:
  <<: *default
production:
  <<: *default
  #mode: live

有没有人用过这个档案的费加罗?还有其他选择在Rails中“秘密”这些信息吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

好的,你应该做的是用config.rb文件替换你的yaml配置文件:

#config/initializers/paypal.rb
PayPal::SDK.configure(
  username: ENV["PAYPAL_CLASSIC_USERNAME_DEV"],
  password: ENV["PAYPAL_CLASSIC_PASSWORD_DEV"],
  signature: ENV["PAYPAL_CLASSIC_SIGNATURE_DEV"],
  app_id: ENV["PAYPAL_CLASSIC_APP_ID_DEV"],
  http_timeout: 30 
)

然后在yaml文件中定义这些变量,例如application.yml:

#config/application.yml
PAYPAL_CLASSIC_USERNAME_DEV: yourpaypalusername
PAYPAL_CLASSIC_PASSWORD_DEV: yourpaypalpassword
PAYPAL_CLASSIC_SIGNATURE_DEV: yourpaypaysignature
PAYPAL_CLASSIC_APP_ID_DEV: yourappid

最后假设您使用git进行版本控制,请进入您的gitignore并告诉它忽略带有您的秘密信息的yaml文件:

#.git_ignore
/config/application.yml

当您将环境变量推送到github或其他git repo时,这将正确地保护您的环境变量。

编辑:要使用不同的环境键,您只需为yaml文件中的不同环境指定键:

#application.yml
production:
  PAYPAL_CLASSIC_USERNAME_DEV: yourpaypalusername
  PAYPAL_CLASSIC_PASSWORD_DEV: yourpaypalpassword
  PAYPAL_CLASSIC_SIGNATURE_DEV: yourpaypaysignature
  PAYPAL_CLASSIC_APP_ID_DEV: yourappid

话虽如此,我高度怀疑你所做的是违反了12种最佳做法。这个yaml文件不是你的应用程序的一部分 - 当你将代码推送到像Heroku这样的服务器时,这个文件不应该随它一起使用。带有密钥的yaml文件应该只存在于本地计算机上。它不应存在于Github中,也不应存在于生产服务器上。要详细了解此信息,请查看以下链接:http://12factor.net/config

那你怎么告诉像Heroku这样的服务器这些配置变量是什么?这取决于您使用的服务提供商,但通常通过命令行工具或管理员管理页面完成。例如,对于Heroku,你会跑:

heroku config:set PAYPAL_CLASSIC_USERNAME_DEV=putyourusernamehere