Ruby on rails Nginx和Unicorn上的资源url出现意外行为

Ruby on rails Nginx和Unicorn上的资源url出现意外行为,ruby-on-rails,ruby-on-rails-3,nginx,unicorn,Ruby On Rails,Ruby On Rails 3,Nginx,Unicorn,我在cpanel上有一个简单的unicorn+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.

我在cpanel上有一个简单的unicorn+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帮助程序的奇怪行为

按预期变成
my.dev.site.com/users

变成
独角兽开发站点/用户


这是什么原因造成的,这两种帮助器方法之间有什么区别,它们会提示这种行为?

这是您的代理。
*\u路径
帮助程序生成表单的字符串

/path
*\u url
帮助程序生成如下字符串

http(s)://h.o.s.t/path
因此,感谢您的代理设置,当请求到达Rails时,它已经被调整,以便主机被列为
http://unicorn_dev_site
,Rails会忠实地复制它生成的URL

也就是说,除非您有多个主机,否则通常不需要使用
*\uURL
帮助程序而不是
*\uPath
帮助程序。如果你想使用它们,你有两个选择:你可以在你的控制器中,你也可以在每个URL的基础上用
:host
选项将其设置为(我希望你可以很容易地将其扩展到
*\u URL
帮助程序,但我不确定)


不管怎样-希望这有帮助

我也有这个问题。谢谢!谢谢你的提示。我解决了这个问题,更改了
proxy\u pass
名称,这样rails就可以得到正确的名称。