2010-10-29 66 views
0

當軌道調用_url助手將返回主機+端口+路徑,例如Rails的:從_url幫助去除口

photo_url 

將返回

http://localhost:3000/photo 

在我的生產環境我有瘦服務於給定端口上的rails應用程序和Apache服務於另一個端口上的靜態內容。當站點沒有任何端口時,每個服務器都知道哪個部分可以處理,並且一切正常。但是,如果給出特定端口,則只有請求的服務器發送響應(這是預期的)。

我現在遇到麻煩,因爲當我通過oauth2(臉譜,微博)認證用戶oder openid我需要發送一個回調URL。我使用的寶石(OmniAuth)使用_url助手(據我所知)(callback_url)來計算回調url。由於附加的端口號,導致只能響應進一步的請求。

有沒有辦法告訴rails,它沒有在任何特定的端口上運行?或者它不使用_url助手中的portnumber?

回答

0

您可以改用photo_path嗎?

+0

我需要改變它的寶石,這不會是一個很好的解決方案。 (gem的行爲是正確的,這是我的設置,很奇怪) – Peter 2010-10-29 12:06:13

1

OmniAuth does 不是使用助手,而是使用自己的方法,它解析request.url來計算完整路徑,除非您自己提供配置。

OmniAuth的callback_url

def callback_url 
    full_host + callback_path 
end 

OmniAuth的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通過設置OmniAuth.config.full_hostStringProc返回要使用的值使用固定full_host

+0

callback_url和full_host的鏈接正在返回404。你能否更新它們? – 2012-04-04 18:22:42

+0

更新的full_host路徑 – 2012-04-04 18:52:04

+0

我想我們還需要覆蓋領域。 – 2012-04-04 19:02:37