Подтвердить что ты не робот

Как получить имя хоста в Rails 3?

В Rails 2.3 я мог просто использовать HOST для получения моего имени хоста, но кажется, что он больше не доступен. Что я могу использовать вместо этого?

Я просто хочу что-то, что возвращает localhost:xxxx (с реальным номером порта), когда я запускаю код с моей машины, и http://www.mysite.com, когда я запускаю его в процессе производства.

4b9b3361

Ответ 1

У вас есть несколько вариантов:

  • команда вызова имени хоста (при условии, что она * nix): `hostname `
  • используйте сокет:

    require 'socket'

    Socket.gethostname

  • если вы просто хотите узнать текущий домен, который посещает запрос: request.domain

Обновление

Из объекта запроса мы можем получить как хост, так и порт, пожалуйста, ознакомьтесь с этими методами:

  • request.protocol
  • request.host
  • request.port

Вы можете создать полный URL-адрес из этих методов.

Из моего личного опыта для большинства проектов у вас может быть фиксированный домен для каждой среды и обычно настраивается в файле yaml или так (например, для отправки электронной почты и использования URL-адресов с доменным именем в теле письма, мы обычно читают конфигурацию и устанавливают параметры для помощника URL-адреса). Поэтому я обычно просто читаю текущую конфигурацию URL-адресов и использую их из кода.

Ответ 2

Используйте следующий метод для ActionController:

request.host_with_port

Ответ 3

На самом деле это легко. Лучшее предложение для решения этой проблемы состоит в том, что вы создаете файл before_filter, который устанавливает его для каждого запроса в ApplicationController.rb следующим образом:

 before_filter :set_mailer_host

  def set_mailer_host
    ActionMailer::Base.default_url_options[:host] = request.host_with_port
  end