J'utilise Apache + mod_wsgi pour Django.
Et toutes les images css/js/sont servies via nginx
.
Pour une raison étrange, lorsque d'autres/amis/collègues essaient d'accéder au site, jquery/css ne se charge pas pour eux, donc la page semble brouillée.
Mes fichiers html utilisent du code comme celui-ci -
<link rel="stylesheet" type="text/css" href="http://x.x.x.x:8000/css/custom.css"/>
<script type="text/javascript" src="http://1x.x.x.x:8000/js/custom.js"></script>
Ma configuration nginx dans sites-available
est comme ça -
server {
listen 8000;
server_name localhost;
access_log /var/log/nginx/aa8000.access.log;
error_log /var/log/nginx/aa8000.error.log;
location / {
index index.html index.htm;
}
location /static/ {
autoindex on;
root /opt/aa/webroot/;
}
}
Il existe un répertoire /opt/aa/webroot/static/
qui ont les répertoires css
& js
correspondants.
La chose étrange est que les pages s'affichent bien lorsque j'y accède.
J'ai effacé mon cache/etc, mais la page se charge correctement pour moi, à partir de divers navigateurs.
De plus, je ne vois aucune erreur 404 dans les fichiers journaux nginx.
Tout pointeur serait formidable.
server_name
doit correspondre au nom d'hôte dans link
/script
URL. Soit déclarer votre configuration par défaut pour cette interface: paire de ports (listen 8000 default
)Je pense que l'utilisation de root
dans le bloc d'emplacement est incorrecte. J'utilise alias
et cela fonctionne très bien, même sans reconfigurer Django.
# Django settings.py
MEDIA_URL = '/static/'
# nginx server config
server {
...
location /static {
autoindex on;
alias /opt/aa/webroot/;
}
}
J'espère que cela rend les choses plus simples.
J'ai aussi eu du mal avec ça. Cependant, l'astuce suivante a fonctionné pour moi:
server {
listen 8000;
server_name localhost;
access_log /var/log/nginx/aa8000.access.log;
error_log /var/log/nginx/aa8000.error.log;
location / {
index index.html index.htm;
}
location ^/static/ {
autoindex on;
root /opt/aa/webroot/;
}
}
Je viens de marquer statique comme expression régulière avec ^
et nginx ont commencé à servir des fichiers statiques. Aucune modification du côté Django côté était nécessaire.
MEDIA_URL ne doit pas être utilisé pour servir le contenu statique comme js etc. Django fournit une option de paramètres STATIC_URL distincte qui peut être utilisée.
Cela peut donc être modifié comme
<script type="text/javascript" src="{{STATIC_URL}}js/jquery-1.3.2.min.js"></script>
En outre, il est plus standard d'utiliser le modèle de fichier d'application staticfile comme ceci:
{% load static from staticfiles %}
<script type="text/javascript" src="{% static 'js/jquery-1.3.2.min.js' %}"></script>
Fim & Alexander - Merci pour les conseils qui ont aidé.
Voici comment je l'ai résolu pour toute personne coincée dans le même bateau -
settings.py -
>MEDIA_ROOT = ''
MEDIA_URL = 'http://x.x.x.x:8000/static/'
Dans mon html -
<script type="text/javascript" src="{{MEDIA_URL}}js/jquery-1.3.2.min.js"></script>
Dans mon views.py -
return render_to_response('templates/login-register.html', {},
context_instance=RequestContext(request));
nginx à l'intérieur du fichier de configuration des sites disponibles -
listen x.x.x.x:8000;
server_name x.x.x.x.;
nginx redémarré
Apache redémarré