如何使用 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 的命令
我正在使用 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 的命令