سؤال

أحاول نشر تطبيق Django الخاص بي على VPS الخاص بي.لذلك اتبعت العديد من البرامج التعليمية والمشكلة الوحيدة التي أواجهها هي أنني لا أستطيع إظهار ملفاتي الثابتة.يمكنك العثور أدناه على بنية ملفاتي على VPS.

  • البيئة الافتراضية:/الاختيار/myapps/
  • مشروع جانغو:/opt/myapps/uniprogress/
  • الملفات الثابتة:/opt/myapps/uniprogress/static/

تكوين نجينكس:/etc/nginx/sites-available/uniprogress

server {
    server_name 188.xxx.xxx.93;

    access_log off;

    location /static/ {
        alias /opt/myapps/uniprogress/static/;
    }

    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"';
    }
}

وأخيرًا في إعدادات Django.py:

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# Template Dirs

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_ROOT = '/opt/myapps/uniprogress/static/'
STATIC_URL = '/static/'

أنا أيضا استخدمت: python manage.py collectstatic ولكن لا تزال ملفاتي الثابتة لن تظهر.

تحديثيمكن العثور على البرنامج التعليمي الذي استخدمته في المحيط الرقمي.

لقد تأكدت مرتين من وجود الملفات على الخادم.

يمكنني أيضًا الوصول إلى الملفات الثابتة مثل: http://188.xxx.xxx.93/static/css/bootstrap.css.

لكن في كود المصدر الخاص بي http://188.xxx.xxx.93:8001/, فهو يربط الملفات الثابتة باستخدام المنفذ.

هذا يعني: <link href="/static/css/bootstrap.css" rel="stylesheet">

لذلك يحاول العثور على bootstrap.css على http://188.xxx.xxx.93:8001/static/bootstrap.css والملف غير موجود (يجب إزالة المنشور حتى يعمل).

هل كانت مفيدة؟

المحلول

لخدمة الملفات الثابتة، قم بذلك على مستوى nginx مثل

server {
server_name 188.xxx.xxx.93;

access_log off;

location ~ ^/(static)/  {
  #  root:- you static files path
  #  alias /opt/myapps/uniprogress/static/;
     root /opt/myapps/uniprogress/static/;
}

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"';
}
}

الآن ستعمل جميع الملفات الثابتة من nginx الخاص بك.

نصائح أخرى

يقوم STATIC_ROOT الخاص بك بتجميع الملفات الثابتة على:

/opt/myapps/uniprogress/opt/myapps/uniprogress/static/

وهذا لا يتطابق مع تكوين الخادم الخاص بك، والذي يشير إلى:

التقيد/myapps/uniprogress/static/

STATIC_ROOT هو مجرد مجلد يحتوي على جميع ملفاتك الثابتة (الصور، CSS، كل شيء) في مكان واحد للنشر، لذا قم بتعيينه على شيء مثل '/collected_static/' وأصلح تكوين الخادم.

تحقق من هذه الأشياء

1 ما إذا كان يمكن الوصول إلى الأقدم الثابت عن طريق nginx، أعني إذن المجلد.

2 أو افعل هذا

استبدل هذا:

STATIC_ROOT = '/opt/myapps/uniprogress/static/'

مع هذا

STATIC_ROOT = ''

وأضف هذا في الإعدادات

STATICFILES_DIRS = (
     '/opt/myapps/uniprogress/static/',
)

تتمنى ان يعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top