2012-05-19 47 views
0

卡住金字塔請求網址的問題,其中request.static_urlrequest.application_url是2個可識別的嫌疑人。金字塔網址錯誤生成,送達nginx + phusion乘客和Mako模板

在金字塔生成的請求網址以某種方式包括視圖網址,當我把它放在網絡主機上 ,但使用pserve本地正常工作。

例如:

​​

裏面的真子模板

我:

href="${request.static_url('project:static/blueprint/css/screen.css')}" 

應顯示(使用pserve):

href="http://www.site.com/static/blueprint/css/screen.css" 

但在代替它表明:

href="http://www.site.com/view/signin/static/blueprint/css/screen.css" 

另一個例子是前網頁網址應顯示:

src = "http://www.site.com/static/img/foo.jpg" 

,而是它表明:

src = "http://www.site.com//static/img/foo.jpg" 

我目前正在運行的金字塔1.3 +馬可在VPS服務器上使用nginx 0.8.53 + Phusion乘客2.2.15的模板。

這與request.application_url相同。在視圖代碼我送的字典(url = request.application_url + '/view/signin'

該窗體的URL應該顯示:

action="http://www.site.com/view/signin" 

相反,它表明:

action="http://www.site.com/view/signin/view/signin" 

我已經複製了一些nginx的設置在http://wiki.pylonshq.com/display/pylonscookbook/Running+Pylons+with+NGINX

特別是:

#site runs on Pylons 
    location/{ 
     include /usr/local/nginx/conf/proxy.conf; 
     proxy_pass http://127.0.0.1:8080; 
     proxy_redirect default; 
    } 

和proxy.conf:

proxy_redirect   off; 
    proxy_set_header  Host $host; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    client_max_body_size 10m; 
    client_body_buffer_size 128k; 
    proxy_connect_timeout 90; 
    proxy_send_timeout  90; 
    proxy_read_timeout  90; 
    proxy_buffer_size  4k; 
    proxy_buffers   4 32k; 
    proxy_busy_buffers_size 64k; 
    proxy_temp_file_write_size 64k; 

我獨自爲它的東西我不想碰別人。

服務器上的nginx.conf看起來像這樣。 (我不使用PHP,但那是我不想碰的東西)。

有人建議將應用程序提供/安裝在/,但我不知道該怎麼做。

server { 
      listen <ip>:80; 

      server_name site.com www.site.com; 

      access_log /<path>/access.log combined; 
      error_log /<path>/error.log error; 

      root /home/<path>/public; 

      index index.html index.htm index.php index.php5; 
      include /home/<path>/nginx/site.com/*; 

      # No mirrors - using strict redirects 
      #if ($http_host != site.com) { 
      rewrite ^(.*)$ http://site.com$1 permanent; 
      #} 

      autoindex on; 

      passenger_enabled on; 
      passenger_base_uri /; 

      # Disallow access to config/VCS data 
      location ~* /\.(ht|svn) { 
       deny all; 
      } 

      #site runs on Pylons 
      location/{ 
       include /<path to conf file>/proxy.conf; 
       proxy_pass http://127.0.0.1:8080; 
       proxy_redirect default; 
      } 

      # Statistics 
      location /stats/ { 
       alias /home/<path>/html/; 
       auth_basic "Statistics Area"; 
       auth_basic_user_file /home/<path>/html/.htpasswd; 
      } 

      location /doc/analog/ { 
       alias /usr/share/analog/; 
      } 

      # PHPMyAdmin 
      rewrite ^/dh_phpmyadmin/([^/]*)/(.*)$ /dh_phpmyadmin/$2; 

      location /dh_phpmyadmin/ { 
       alias /dh/web/phpmyadmin/; 
      } 

      location ~ /dh_phpmyadmin/(.+)\.php { 
       alias /dh/web/phpmyadmin/; 
       fastcgi_param SERVER_PORT 80; 
       fastcgi_split_path_info ^(.+\.php)(/.*)$; 
       include /dh/nginx/etc/fastcgi_params; 
       set $relpath "index.php"; 
       if ($uri ~ ^/dh_phpmyadmin/(.+)$) { 
        set $relpath $1; 
       } 
       fastcgi_param SCRIPT_FILENAME /dh/web/phpmyadmin/$relpath; 
       fastcgi_pass unix:/home/<path>/.php.sock; 
      } 

      # PHP 
      location ~* \.(php|php5|php4)($|/) { 
       fastcgi_param SERVER_PORT 80; 
       fastcgi_split_path_info ^(.+\.(?:php|php5|php4))(/.*)$; 
       if (!-e $document_root$fastcgi_script_name) { 
        return 404; 
       } 
       include /dh/nginx/etc/fastcgi_params; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       fastcgi_pass unix:/home/<path>/.php.sock; 
       #pragma php_launch <path> 
      } 

     } 

回答

1

好像你的Web服務器(乘客?我沒用過這種)未設置ENVIRON(request.environ)正確。這可能是一個配置選項,但如果您在訪問/view/signin時查看環境的SCRIPT_NAMEPATH_INFO密鑰,則應該看到SCRIPT_NAME=''PATH_INFO='/view/signin'。如果不是這種情況,您的應用程序前綴可能在乘客中是錯誤的。

0

您的網站不使用乘客服務金字塔。它確實使用了reverse_proxy。除非有辦法在8080端口上運行乘客,否則nginx配置中的乘客部分是無用的。

這就是說,你可以看看有:

http://kbeezie.com/view/using-python-nginx-passenger/5/

你不得不刪除此塊得到它的客運工作:

 location/{ 
      include /<path to conf file>/proxy.conf; 
      proxy_pass http://127.0.0.1:8080; 
      proxy_redirect default; 
     } 

,那麼你就必須創建可調用的wsgi函數,這將調用金字塔。

你必須定義一個根路徑爲乘客:

root /path/to/app/public/; 

,並把在/path/to/app/

的文件也有類似的內容,這個文件

import sys 
import os 

def application(environ, start_response): 
    start_response("200 OK", []) 
    ret = ["%s: %s\n" % (key, value) 
     for key, value in environ.iteritems()] 
    return ret 
稱爲passenger_wsgi.py

但是,你不得不稱呼金字塔,它是你的應用程序的入口點。

這就是說,你有什麼理由爲什麼你使用乘客。使用諸如uwsgi之類的東西來部署你的應用程序會不會更容易?與乘客部署紅寶石應用程序是有道理的,但我沒有看到你使用乘客得到什麼。

這裏是一個很好的教程,你可以跳過大部分的部分,因爲這裏只有nginx-uwsgi部分對你有意義。

http://liangsun.org/2012/02/pyramid-nginx-uwsgi-mysql/