2

私はcpanelに簡単なユニコーン+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ます。

これを引き起こしているのは何ですか?また、この動作を促すこれら2つのヘルパーメソッドの違いは何ですか?

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 に答える