如何使用 Rails 5 在本地让 curl 或 httpie 访问子域

How to have curl or httpie access subdomains locally with Rails 5

我正在使用 Rails 5 构建一个 API 并尝试使用 curl 或 httpie.[=15 在命令行上本地测试 post 请求=]

但是,我在我的路线中使用 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 结合使用的文档。我该怎么做?

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

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

的自定义本地主机名

environments/development.rb 中的 Rails 应用程序中,我确保将以下行设置为 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 的命令