【问题标题】:Access a hash value from another ruby script从另一个 ruby​​ 脚本访问哈希值
【发布时间】:2015-10-26 12:33:05
【问题描述】:

我目前有 2 个 API,需要 2 个不同的凭据。我想将我的更改提交到Github,但我不希望看到这些凭据,因此我决定将我的所有凭据保存在一个单独的ruby 文件中的hash 中,然后想在我的脚本中访问它。同时,将该文件添加到.gitignore。但我被困在从我当前的脚本中访问那个hash

这是我的credentials.rb

credentials = { 
    APIKEY: '12'
    PASSWORD: '34'
    sid: '45'
    token: '56'
}

这是我的main.rb

class ApisController < ApplicationController

  def api
    url = "https://#{credentials[APIKEY]}:#{credentials[PASSWORD]}@test"
  end

end

我不确定如何在 main.rb 中调用该哈希。

【问题讨论】:

  • 有什么理由不将这些引用添加到您的 secrets.yml 中,然后将真实值添加到 ENV 中?
  • @Austio 我已经向 ENV 添加了值,但是我如何从 yml 文件中访问它.. 就像这样:#{APIKEY} 例如,我添加:APIKEY: "123"跨度>

标签: ruby-on-rails ruby model-view-controller hash key-value


【解决方案1】:

您可以通过三种方式做到这一点:

  1. 在 Rails 中有传统的 & 方便 方法可以做到这一点。在.environment 文件中添加您的所有私人凭据。
  2. 从您 gitignore 的另一个 ruby​​ 脚本访问哈希值。
  3. 如果你坚持的话,或者你可以做得更长。

第一种方式: 直接在需要的文件中使用环境变量。如果您在 yaml 中需要它们:

your_yaml_file.yml

 credentials_or_whatever:
       APIKEY: <%= ENV['API_KEY'] %>
       PASSWORD: <%= ENV['API_PASSWORD'] %>

或者如果你需要他们main.rb:

class ApisController < ApplicationController

  def api
    url = "https://#{credentials['APIKEY']}:#{credentials['PASSWORD']}@test"
  end

end

第二种方式:如果由于某种原因您必须使用 gitignore 的哈希而不是仅使用环境文件,那么您的 credentials.rb 包含您的凭据,您以后可以在需要的地方访问他们。 gitignored 文件:

credentials = { 
    "APIKEY": "12",
    "PASSWORD": "34"
    "sid": "45"
    "token": "56"
}

然后你的main.rb:

class ApisController < ApplicationController

  def api
    url = "https://#{credentials["APIKEY"]}:#{credentials["PASSWORD"]}@test"
  end

end

第三种方式:在环境变量中添加您的私有凭据,然后使用它们创建您 gitignore 的哈希:

您的credentials.rb 文件:

credentials = { 
    "APIKEY": ENV['APIKEY'],
    "PASSWORD": ENV['PASSWORD'],
    "sid": ['SID'],
    "token": ENV['TOKEN']
}

在第一种和第二种情况下,您的环境变量文件可能如下所示:

.env(在您的 Rails 根文件夹中):

APIKEY = 12
PASSWORD = 34
SID = 1234
TOKEN = 5678

我希望这有助于解释!

【讨论】:

  • 如果我确实使用环境变量,那么我如何在我的 credentials.rb 中访问
  • 为什么要在credentials.rb 中创建一个散列,然后还要使用环境变量来隐藏您的凭据?只需 gitignore 你的.env 文件。这有意义吗?
  • 我正在寻找实现这一目标的最佳方法。我也想学习这两种方法。
  • 我在哪里添加 credentials code that you mentioned ?哪个文件?
  • 我根据您的评论扩展了我的答案。我希望它有所帮助。
猜你喜欢
  • 2013-07-21
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多