Как получить URL-адрес хоста в разработке и производстве в Rails/Rspec?

Я создаю тесты для своего senders_controller и пытаюсь получить свой базовый URL-адрес, чтобы иметь возможность вызывать запрос HTTParty. В основном мне нужен тот же метод, чтобы получить одну из этих двух ссылок в зависимости от среды:

  • в разработке: http://localhost:3100/senders
  • в производстве: https://example.com/senders

Мои тесты работают в моем spec/senders_controller.rb следующим образом:

HTTParty.post("http://localhost:3100/senders", query: {email: user.email})

Но я хочу, чтобы эта ссылка также работала в производстве, поэтому я ищу динамический способ получить базовый URL-адрес как в разработке, так и в производстве.

Любые идеи?


person Juliette Chevalier    schedule 28.08.2019    source источник
comment
Вы пытаетесь использовать разработку (localhost:3100) и производство (example.com) в качестве базового URL-адреса для спецификации или кода в контроллере? Вы можете использовать request.base_url для последнего. Для первого, возможно, это может вам помочь? ????stackoverflow.com/a/29037481/7485031   -  person Ali Ilman    schedule 29.08.2019


Ответы (2)


Вариант, который я использовал в прошлом, — использовать гем config.

Вы можете создавать переменные для разных сред, а затем просто вызывать эту переменную.

Например, у вас может быть config/settings/development.yml, определяющий URL-адрес одним из способов:

base_url: "http://localhost:3100/senders"

И файл config/settings/production.yml, который определяет это другое:

base_url: "https://example.com/senders"

Затем вызовите его с помощью Settings.base_url

Он автоматически разрешает среду и заполняет правильные параметры для этой среды.

person Joe Edgar    schedule 29.08.2019
comment
Это было именно то, что мне было нужно! Спасибо, сработало как шарм ???? - person Juliette Chevalier; 29.08.2019

Попробуйте это, красиво и просто:

url = Rails.env.development? ? "localhost:3100/senders" : "example.com/senders"

HTTParty.post(url, query: {email: user.email})
person Gotenks-J    schedule 29.08.2019
comment
Мне пришлось передать Rails.env.test, а не Rails.env.development, так как я использовал ссылки для тестирования. Это должно было сработать, за исключением другой конфигурации, которая у меня была.. Отличная идея, однако. Спасибо за помощь! - person Juliette Chevalier; 29.08.2019
comment
Не могли бы вы принять этот ответ, если бы он был полезен и привел вас к конечной цели? Спасибо! - person Gotenks-J; 13.11.2019