我使用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中“秘密”这些信息吗?
提前致谢!
答案 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