【问题标题】:How does one pull an API environment variable in rails如何在 Rails 中提取 API 环境变量
【发布时间】:2014-08-12 10:59:31
【问题描述】:

在rails中实现,暂时只在本地运行。

使用我有一个用于 google 地方的 google API 服务器密钥...可以说...“abc123”

当我使用 url 只是为了查看类似这样的 url:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=abc123

它提取信息。

当我从 mac 终端输入 env 时,我列出了一个值:

PLACES_API=abc123

当我运行填充文字键的代码时:

@client = GooglePlaces::Client.new("abc123")

效果很好。

但是,当我尝试使用

将其拉入时
@client = GooglePlaces::Client.new(ENV['PLACES_API'])

它出错了,当我尝试放置 ENV['PLACES_API'] 时它是空白的。

我假设我没有正确使用环境变量,但现在我想知道我做错了什么以及如何使用环境变量。

【问题讨论】:

  • 如果你puts ENV 看到其他环境变量了吗?
  • 如果我放置 ENV,它只会记录一个“ENV” - 如果我在其上运行 each 方法并放置每个元素,是的......它会打印出很多东西,但不是我的变量!
  • 对不起。我没有意识到ENV 已经定义了它的to_s 方法来只输出ENV。无论如何,只要确认一下,如果您执行ruby -e "puts ENV.has_key?('PLACES_API')" do you get true` 或false?
  • 这会返回一个“真”
  • 我刚刚添加了另一个测试环境变量并运行了每个循环。它也没有打印出来。就好像我实际上是在设置变量(并且已经从项目根目录和 app/controllers 目录完成),但是应用程序没有从我设置它的位置读取!

标签: ruby-on-rails rubygems environment-variables google-places-api


【解决方案1】:

选项 1

如果您在代码中使用ENV['PLACES_API'],那么在启动 Rails 服务器之前,您必须导出密钥。在您的终端中运行export PLACES_API="api key",然后启动服务器。

选项 2(处理密钥的更好方法)

使用以下代码在config 目录中创建一个文件gmap.yaml

development:
  secret: "api key"
test:
  secret: "api key"
production:
  secret: "api key"

现在使用以下代码在config/initializars 目录中创建一个新文件gmap.rb

PLACES_API = YAML.load_file("#{::Rails.root}/config/gmap.yml")[::Rails.env]

现在您可以使用

@client = GooglePlaces::Client.new(PLACES_API['secret'])

【讨论】:

  • 你能分享一下错误吗?此外,如果您使用第二个选项,则需要重新启动 Rails 服务器,以便 Rails 可以从初始化程序加载密钥
猜你喜欢
  • 2017-09-04
  • 2018-08-08
  • 1970-01-01
  • 2021-12-20
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2023-03-12
相关资源
最近更新 更多