0

我正在使用 Rails 5 构建一个 API,并尝试使用 curl 或httpie在命令行上本地测试发布请求。

但是,我constraints subdomain: 'api'在我的路线中使用,curl 和 httpie 都不喜欢这样。如果我打开 Chrome 并转到http://api.localhost:3000/v1/users,我会收到有效响应。但是,使用 httpie 我收到此错误:

    http: error: ConnectionError: HTTPConnectionPool(host='api.localhost', port=3000): 
Max retries exceeded with url: /v1/users (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection 
object at 0x105732550>: Failed to establish a new connection: [Errno 8] 
nodename nor servname provided, or not known',)) while doing GET request to 
URL: http://api.localhost:3000/v1/users

我几乎可以肯定这是由于子域,但我在任何地方都找不到任何涉及使用 curl 或 httpie 的子域的文档。我怎样才能做到这一点?

4

1 回答 1

0

我想到了!这是我所做的:

由于我使用的是 linux 环境,所以我去了 /etc/hosts 并添加了一个名为api.stevenlocal.com.

在我的 Rails 应用程序中,environments/development.rb我确保以下行设置为1

 # Allow constraint subdomain for routes
  config.action_dispatch.tld_length = 1

将其设置为 1 会告诉 rails 顶级域将在一个句点之后(在这种情况下,stevenlocal 是顶级域,它在 .com 之后)。这很重要,因为 Rails 知道基本上在两个句点 ( subdomain(first-period)top-level-domain(second-period)com) 之后查找我的子域。默认情况下,Rails 将此行设置为 1,但我之前已更改它。

现在在命令行上,当我尝试时http api.stevenlocal.com:3000/v1/users,它按预期工作。请注意,http 是与httpie命令行工具一起使用的类似 curl 的命令

于 2017-04-02T01:03:07.060 回答