Ruby on rails Nginx和Unicorn上的资源url出现意外行为
我在cpanel上有一个简单的unicorn+nginx设置,使用capistrano部署。nginx.conf服务器块如下所示: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.
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就可以得到正确的名称。