【问题标题】:Rails: Paypal configuration file and figaro environment variablesRails:Paypal 配置文件和 figaro 环境变量
【发布时间】:2015-03-27 23:58:58
【问题描述】:

我正在使用 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

有人用 Figaro 处理这个文件吗?在 Rails 中是否有任何其他选项可以“隐藏”这些信息?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails paypal


    【解决方案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 
    )
    

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

    #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
    

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

    那么你如何告诉像 Heroku 这样的服务器这些配置变量是什么?这将根据您使用的服务提供商而有所不同,但通常通过命令行工具或通过管理员管理页面完成。例如,对于 Heroku,您将运行:

    heroku config:set PAYPAL_CLASSIC_USERNAME_DEV=putyourusernamehere
    

    【讨论】:

    • 如何获得专业证书?像这样:如果 Rails.env.development? PayPal::SDK.configure(用户名:ENV["PAYPAL_CLASSIC_USERNAME_DEV"],密码:ENV["PAYPAL_CLASSIC_PASSWORD_DEV"],签名:ENV["PAYPAL_CLASSIC_SIGNATURE_DEV"],app_id: ENV["PAYPAL_CLASSIC_APP_ID_DEV"],http_timeout: 30 ) else PayPal: :SDK.configure( 用户名: ENV["PAYPAL_CLASSIC_USERNAME_PRO"], 密码: ENV["PAYPAL_CLASSIC_PASSWORD_PRO"], 签名: ENV["PAYPAL_CLASSIC_SIGNATURE_PRO"], app_id: ENV["PAYPAL_CLASSIC_APP_ID_PRO"], http_timeout: 30) end
    • 我更新了我的回复。我相信你可能并不完全理解 Figaro 是如何工作的。如果我的更新有帮助,请告诉我:)
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 2015-07-09
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多