2009-11-15 2 views
2

Je télécharge des images à mon App en utilisant Ajax et un Iframe. En développement tout fonctionne comme un charme. Mais dans la production Nginx soulève soudainement une erreur 404. Lorsque je regarde dans le journal, la demande ne touche jamais l'application Rails. Donc, je suppose que cela a quelque chose à voir avec ma configuration Nginx (peut-être la compression gzip).Nginx soulève 404 en utilisant format => 'js'

Les demandes qui échouent sont envoyées à "/images.js".

Des idées pour résoudre ce problème? Google ne pouvait pas me aider ...

config Mon Nginx:

server { 
     listen 80; 
     server_name www.myapp.de; 
     root /var/www/apps/myapp/current/public; # <--- be sure to point to 'public'! 
     passenger_enabled on; 
     rails_env production; 

     # set the rails expires headers: http://craigjolicoeur.com/blog/setting-static-asset-expires-headers-with-nginx-and-passenger 
     location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ { 
      expires max; 
      break; 
     }                      

     gzip on; 
     gzip_http_version 1.0; 
     gzip_vary on; 
     gzip_comp_level 6; 
     gzip_proxied any; 
     gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
     # make sure gzip does not lose large gzipped js or css files 
     # see http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl 
     gzip_buffers 16 8k; 

     # this rewrites all the requests to the maintenance.html 
     # page if it exists in the doc root. This is for capistrano?^?^?s 
     # disable web task 
     if (-f $document_root/system/maintenance.html) { 
     rewrite ^(.*)$ /system/maintenance.html last; 
     break; 
     } 

     # Set the max size for file uploads to 10Mb 
     client_max_body_size 10M; 
     error_page 500 502 503 504 /500.html; 
    location = /500.html { 
     root /var/www/apps/myapp/current/public; 
    } 


    } 

Répondre

1

nginx servira la demande de /images.js de votre racine/var/www/apps/myapp/courant/public depuis elle correspond à

 location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ { 
     expires max; 
     break; 
    }                      

(la directive de rupture ne s'applique qu'aux règles de réécriture afaik de sorte qu'il peut être enlevé)

Si vous voulez servir /images.js de rails, vous devez activer rails pour cet endroit.

1

Il est à noter que toutes les requêtes .json seront interceptées si vous utilisez l'expression régulière ci-dessus. Ajoutez un $ pour éviter cela.

location ~* \.(ico|css|js$|gif|jp?g|png)(\?[0-9]+)?$ { 
    expires max; 
    break; 
} 
0

je suis tombé sur une question très similaire, et mis format.json au lieu de format.js - ce fait une URL qui avait une extension .json, mais m'a permis de ne pas modifier mon config Nginx.

1

A cet effet, j'utiliser cette directive emplacement:

location ~* ^.+\.(jpg|jpeg|gif|png|css|swf|ico|mov|flv|fla|pdf|zip|rar|doc|xls)$ 
{ 
    expires 12h; 
    add_header Cache-Control private; 
} 
location ~* ^/javascripts.+\.js$ 
{ 
    expires 12h; 
    add_header Cache-Control private; 
} 
Questions connexes