Как иметь 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.

Другие вопросы по тегам