【问题标题】:How to load ENV variable by Domain wise in same environment in Rails?如何在 Rails 的同一环境中按域明智地加载 ENV 变量?
【发布时间】:2016-11-17 07:27:03
【问题描述】:

我使用了 Devise,omniauth-facebook gem。

我需要在同一应用程序中为同一环境(如生产)中的不同主机加载不同的 ENV 变量。需要实现Login with facebook

我有两个主机用于相同的应用程序代码:

1) www.abc-domain.com

2) www.xyz-domian.com

我的 ENV 变量(config/settings.yml):

production:
  abc-domain-credential:
    facebook_access_key: "ABC_ACCESS_KEY"
    facebook_api_key: "ABC_API_KEY"
  xyz-domain-credential:
    facebook_access_key: "XYZ_ACCESS_KEY"
    facebook_api_key: "XYZ_API_KEY"

在我的 devise.rb 文件 (config/initializer/devise.rb) 中:

Devise.setup do |config|
  ...
  ...
  require "omniauth-facebook"
  config.omniauth :facebook, ENV_SETTINGS["abc-domain-credential"]["facebook_access_key"], ENV_SETTINGS["abc-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
  # ===== OR ======
  config.omniauth :facebook, ENV_SETTINGS["xyz-domain-credential"]["facebook_access_key"], ENV_SETTINGS["xyz-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
  ...
  ...
end

当我访问 http://www.abc-domain.com 时,下面的 env 应该从 settings.yml 加载

abc-domain-credential:
   facebook_access_key: "ABC_ACCESS_KEY"
   facebook_api_key: "ABC_API_KEY"

当我访问 http://www.xyz-domain.com 时,下面的 env 应该从 settings.yml 加载

xyz-domain-credential:
  facebook_access_key: "XYZ_ACCESS_KEY"
  facebook_api_key: "XYZ_API_KEY"

使用 Facebook 按钮登录:

<%= link_to "/users/auth/facebook", "Login With Facebook" %>

我必须为两个主机加载不同的 ENV 变量,例如

if host == "abc-domain"
  config.omniauth :facebook, ENV_SETTINGS["abc-domain-credential"]["facebook_access_key"], ENV_SETTINGS["abc-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
elsif host == "xyz-domain"
  config.omniauth :facebook, ENV_SETTINGS["xyz-domain-credential"]["facebook_access_key"], ENV_SETTINGS["xyz-domain-credential"]["facebook_api_key"], scope: 'email', info_fields: 'email,name'
end

config/initializer/devise.rb 文件中

【问题讨论】:

  • 您在哪里托管?你在用heroku之类的东西吗?

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

将两个凭据上传到不同的密钥中(就像你正在做的那样)并使用

request.base_url

在您的设计控制器中确定调用域并使用正确的凭据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2011-06-25
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多