これが私の設定です:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
STATIC_ROOT = '/home/Django-projects/tshirtnation/staticfiles'
これが私のnginx構成です:
server {
server_name 77.241.197.95;
access_log off;
location /static/ {
alias /home/Django-projects/tshirtnation/staticfiles/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
python manage.py collectstatic
を実行しましたが、すべての静的ファイルがコピーされました。サーバーをgunicorn_Django--bind:my-ip:8001で実行しましたが、静的ファイルを除いてすべてが機能しているようです。
編集:私は実行しました
Sudo tail /var/log/nginx/error.log
静的ファイルが見つからないというエラーはないようです:/
同じ問題が発生し、/
の場所から末尾の/static/
を削除することで、nginx構成を修正できました。
location /static { # "/static" NOT "/static/"
# ...
}
正規表現のチェックをスキップするには、静的な場所に^~
プレフィックス修飾子を追加してみてください。
location ^~ /static/ {
alias /home/Django-projects/tshirtnation/staticfiles/;
}
settings.py:
ALLOWED_HOSTS = ['*']
STATIC_URL = '/static/'
STATIC_ROOT = '/home/calosh/PycharmProjects/Proyecto_AES/static/'
MEDIA_ROOT = '/home/calosh/PycharmProjects/Proyecto_AES/media/'
MEDIA_URL = '/media/'
Nginx構成(/ etc/nginx/sites-enabled/default)
server {
server_name localhost;
access_log off;
location /static/ {
alias /home/calosh/PycharmProjects/Proyecto_AES/static/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
次に、nginxサーバーを再起動します。
Sudo service nginx restart
そしてgunicornを実行します:
gunicorn PFT.wsgi
ローカルホストまたはローカルネットワーク全体(ポート80)でアプリケーションを提供します。
http://127.0.0.1/
Settings.pyに、次のように入力します。
STATICFILES_FINDERS = (
'Django.contrib.staticfiles.finders.FileSystemFinder',
'Django.contrib.staticfiles.finders.AppDirectoriesFinder'
)
STATIC_ROOT = "/home/Django-projects/tshirtnation/staticfiles/"
STATIC_URL = '/static/'
あなたはこれを必要としません:
STATICFILES_DIRS = ...
settings.pyでこれを試してください:
import os
ROOT_PATH = os.path.dirname(__file__)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(ROOT_PATH,'static/')
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]
およびnginx(またはサーバー設定)の構成ファイル:
location /static {
alias /home/djangohome/static; # your Django project's static files - amend as required
}
私はブラウザがあなたの静的を見つけようとしていると思います:
http://127.0.0.1:8001/static/
Nginxはデフォルトで80ポートで動作しますが。
Nginx configで8001ポートを定義するか、80ポートでDjangoサーバーを実行する必要があります。
私のはこのように見えます、そしてそれは働きました:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), '..', 'static'),
)
そしてnginx構成では、私の場所/ static /は場所/の上にありますこのように
location /static {
//
}
# Finally, send all non-media requests to the Django server.
location / {
//
}
そしてもう1つ、それが重要かどうかはわかりませんが、サーバーに「リッスン」があります{}。それが役立つかどうかはわかりません。
これを確認してください
1静的な古いものにnginxからアクセスできるかどうかは、フォルダーのアクセス許可を意味します。
2またはこれを行う
これを置き換えます:
STATIC_ROOT = '/home/Django-projects/tshirtnation/staticfiles'
これとともに
STATIC_ROOT = ''
そしてこれを設定に追加します
STATICFILES_DIRS = (
'/home/Django-projects/tshirtnation/staticfiles/',
)
Nginxサーバーをリロードすることを忘れないでください。
これがうまくいくことを願っています。
問題は、location /
ブロックの後でも、常にlocation /static/
ブロックが使用されるため、すべてがproxy_pass
されます。
ここでの解決策は、いくつかのtry_files
魔法を使用することです。
server {
server_name 77.241.197.95;
access_log off;
location / {
try_files $uri @Django;
}
location /static/ {
alias /home/Django-projects/tshirtnation/staticfiles/;
try_files $uri =404;
# here we use =404 because there is no need to pass it to gunicorn.
}
location @djago {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}