我在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
佣工,但我不知道这一点)。
无论如何 – 希望有所帮助!