Nginx和Unicorn上resource_url的意外行为

我在cpanel上有一个简单的独angular兽+ nginx设置,部署与capistrano。 nginx.conf服务器块如下所示:

server { error_log /var/log/nginx/vhost-error_log warn; listen 123.456.789.0; server_name my.dev.site.com www.my.dev.site.com; access_log /usr/local/apache/domlogs/my.dev.site.com-bytes_log bytes_log; access_log /usr/local/apache/domlogs/my.dev.site.com combined; root /home/me/sites/dev/current/public; try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_pass http://unicorn_dev_site; } error_page 500 502 503 504 /500.html; } 

在这个设置下,任何对像User这样的资源的引用都会产生url助手的奇怪行为。

按照预期, <%= users_path %>将成为my.dev.site.com/users

<%= users_url %>成为unicorn_dev_site/users

是什么导致了这种情况,这两种助手方法之间的区别是什么?

这是你的代理。 *_path助手生成表单的字符串

 /path 

*_url助手生成类似的字符串

 http(s)://host/path 

所以感谢你的代理设置,当请求到达Rails的时候,它已经被调整了,所以主机被列为http://unicorn_dev_site ,Rails忠实地复制了它生成的URL。

也就是说,除非有多个主机,否则通常不需要使用*_url帮助器而不是*_path帮助器。 但是,如果你想使用它们,你可以选择几个选项:你可以在你的控制器中设置默认的主机 ,也可以使用:host选项来设置每个URL的url_for (我希望你可以扩展这很容易的*_url佣工,但我不知道这一点)。

无论如何 – 希望有所帮助!