2012-09-06 6 views
2

capistrano와 함께 배포 된 cpanel에 간단한 unicorn + nginx 설정이 있습니다. nginx.conf 서버 블록은 다음과 같습니다Nginx 및 Unicorn에서 resource_url로 예기치 않은 동작이 발생했습니다.

이 설정에서
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이됩니다.

이 문제를 일으키는 두 가지 도우미 메서드의 차이점은 무엇입니까?

답변

3

프록시입니다. *_path 헬퍼는

/path 

*_url 헬퍼

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

그래서 프록시 설정 덕분에이 요청이 레일에 도착하는 시간에 의해, 그것은 있도록 비틀어져처럼 문자열을 생성하면서 형태의 문자열을 생성 호스트는 http://unicorn_dev_site으로 표시되며, 레일스는 생성 된 URL을 충실히 복제합니다.

많은 호스트가 없으면 보통 *_path 명의 도우미 대신 *_url 명의 도우미를 사용할 필요가 없습니다. 그래도 사용하려면 몇 가지 옵션이 있습니다. 컨트롤러에서 set the default host을 사용할 수 있으며 URL 단위로 :host 옵션을 url_for으로 설정할 수도 있습니다 (이 방법을 매우 쉽게 확장하여 *_url 도우미들, 그러나 나는 그것을 확실히 모른다).

어쨌든 - 도움이 되길 바랍니다!

+1

이 문제도 발생했습니다. 고마워요! –

+1

힌트를 보내 주셔서 감사합니다. 나는 레일스가 올바른 것을 얻을 수 있도록이 변화하는'proxy_pass' 이름을 풀었다. – fuzzyalej

관련 문제