在rails中调用_url helper时,它将返回host + port + path,例如
photo_url
将返回
http://localhost:3000/photo
在我的生产环境中,我在给定端口上为rails应用程序提供瘦服务,在另一个端口上提供静态内容的apache。当网站没有任何端口时,每个服务器都知道要处理的部分,一切都很好。但是,如果给出了特定端口,则只有请求的服务器发送响应(这是预期的)。
我现在遇到了麻烦,因为当我通过oauth2(facebook,twitter)或openid验证用户时,我需要发送一个回调网址。我使用的gem(OmniAuth)使用_url助手(据我所知)(callback_url)来计算回调网址。由于附加的端口号,这导致仅对其他请求进行精简响应。
有没有办法告诉rails,它没有在任何特定端口上运行?或者它不使用_url助手中的portnumber?
答案 0 :(得分:1)
OmniAuth 不使用帮助程序,而是使用自己的方法解析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包括端口号
请注意,如有必要,您可以将full_host
设置为OmniAuth.config.full_host
或String
,以便返回您要使用的值,从而将OmniAuth配置为使用固定的Proc
答案 1 :(得分:0)
您可以使用photo_path吗?