我正在使用 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 的子域的文档。我该怎么做?
我想通了!这是我所做的:
由于我使用的是 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 的命令