Rails: удалить порт из _url helper - PullRequest
       3

Rails: удалить порт из _url helper

0 голосов
/ 29 октября 2010

При вызове помощника _url в rails он вернет host + port + path, например,

photo_url

вернется

http://localhost:3000/photo

В моей производственной среде я использую приложение rails на одном порту, а apache - статическое содержимое на другом порту. Когда сайт принят без какого-либо порта, каждый сервер знает, с какой частью работать, и все в порядке. Однако, если указан определенный порт, только запрошенный сервер отправляет ответ (что ожидается).

У меня сейчас проблемы, потому что когда я аутентифицирую пользователя через oauth2 (facebook, twitter) или oder openid, мне нужно отправить URL обратного вызова. Джем, который я использую (OmniAuth), использует помощника _url (насколько я могу судить) (callback_url) для вычисления URL обратного вызова. В результате из-за добавленного номера порта только незначительный ответ на дальнейшие запросы.

Есть ли способ сообщить rails, что он не работает на каком-либо конкретном порту? Или что он не использует номер порта в помощнике _url?

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

OmniAuth не использует помощника, а использует собственный метод, который анализирует request.url для расчета полного пути, если вы сами не настроили конфигурацию.

OmniAuth's callback_url:

def callback_url
  full_host + callback_path
end

OmniAuth's full_host:

def full_host
  case OmniAuth.config.full_host
    when String
      OmniAuth.config.full_host
    when Proc
      OmniAuth.config.full_host.call(env)
    else
      uri = URI.parse(request.url)
      uri.path = ''
      uri.query = nil
      uri.to_s
  end
end

Итак, если вы заходите на страницу на http://localhost:3000/whatever, OmniAuth будет использовать http://localhost:3000 в качестве full_url. Если к странице обращаются http://mysite.com/whatever, full_url будет http://mysite.com. Таким образом, номер порта сервера thin, обслуживающего страницу , не должен добавляться к URL, если только URL-адрес, используемый для доступа к странице, которая перенаправляет пользователя на обратный вызов, не включает номер порта.

Обратите внимание, что при необходимости вы можете настроить OmniAuth на использование фиксированного full_host, установив OmniAuth.config.full_host в String или Proc, который возвращает значение, которое вы хотите использовать.

0 голосов
/ 29 октября 2010

Можете ли вы вместо этого использовать photo_path?

...