Как иметь curl или httpie доступ к поддоменам локально с Rails 5
Я создаю API с Rails 5 и пытаюсь локально тестировать пост-запросы в командной строке с помощью curl или httpie.
Тем не менее, я использую constraints subdomain: 'api'
в моих маршрутах и керлу и 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. Как я могу это сделать?
1 ответ
Я понял! Вот что я сделал:
Поскольку я использую среду 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 - это команда типа curl, используемая с помощью инструмента командной строки httpie.