2

我在 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 助手产生奇怪的行为。

<%= users_path %>变得my.dev.site.com/users如预期。

<%= users_url %>变成unicorn_dev_site/users.

造成这种情况的原因是什么,提示这种行为的这两个帮助方法之间有什么区别?

4

1 回答 1

3

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

/path

*_url助手生成字符串,如

http(s)://h.o.s.t/path

因此,由于您的代理设置,当请求到达 Rails 时,它已经过调整,主机被列为http://unicorn_dev_site,Rails 忠实地复制了它生成的 URL。

也就是说,除非您有多个主机,否则通常不需要使用*_url助手而不是助手。*_path但是,如果您想使用它们,您有几个选择:您可以在控制器中设置默认主机,也可以使用url_for:host选项在每个 URL 的基础上设置它(我希望您可以扩展这个漂亮帮手很容易,但我不确定)。*_url

无论如何-希望有帮助!

于 2012-09-06T18:29:46.457 回答