Rails: Paypal配置文件和figaro环境变量
Rails: Paypal configuration file and figaro environment variables
我正在使用 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 中是否还有 "secretize" 此信息的其他选项?
提前致谢!
好的,您应该做的是用 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 存储库时,这将正确地将您的环境变量排除在代码库之外。
编辑:要使用不同的环境密钥,您只需在 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
话虽如此,我高度怀疑您的行为违反了 12factor 最佳实践。这个 yaml 文件不是你的应用程序的一部分——当你将你的代码推送到像 Heroku 这样的服务器时,这个文件不应该与它一起使用。带有您的密钥的 yaml 文件应该只存在于您的本地机器上。它不应存在于 Github 中,也不应存在于您的生产服务器上。要了解更多相关信息,请查看此 link:http://12factor.net/config
那么你如何告诉像 Heroku 这样的服务器这些配置变量是什么?这将根据您使用的服务提供商而有所不同,但通常是通过命令行工具或通过管理员管理页面完成的。例如,对于 Heroku,你会 运行:
heroku config:set PAYPAL_CLASSIC_USERNAME_DEV=putyourusernamehere
我正在使用 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 中是否还有 "secretize" 此信息的其他选项?
提前致谢!
好的,您应该做的是用 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 存储库时,这将正确地将您的环境变量排除在代码库之外。
编辑:要使用不同的环境密钥,您只需在 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
话虽如此,我高度怀疑您的行为违反了 12factor 最佳实践。这个 yaml 文件不是你的应用程序的一部分——当你将你的代码推送到像 Heroku 这样的服务器时,这个文件不应该与它一起使用。带有您的密钥的 yaml 文件应该只存在于您的本地机器上。它不应存在于 Github 中,也不应存在于您的生产服务器上。要了解更多相关信息,请查看此 link:http://12factor.net/config
那么你如何告诉像 Heroku 这样的服务器这些配置变量是什么?这将根据您使用的服务提供商而有所不同,但通常是通过命令行工具或通过管理员管理页面完成的。例如,对于 Heroku,你会 运行:
heroku config:set PAYPAL_CLASSIC_USERNAME_DEV=putyourusernamehere