2012-06-11 6 views
6

मैंने कई संबंधित पोस्टों को देखा है लेकिन कुछ भी मदद नहीं कर रहा है।
प्रासंगिक जानकारी:डीजेगो स्थिर फाइलों की सेवा करते समय अपाचे 403

Django संस्करण - 1,4

अपाचे संस्करण - 2,2

अजगर संस्करण - 2,7

ओएस - Xubuntu 12,04

डीबी - Mysql

मैं अपाचे को django ऐप और स्थिर फ़ाइलों दोनों की सेवा करने की कोशिश कर रहा हूं। यह मुद्दा व्यवस्थापक साइट में स्पष्ट हो गया है जो किसी भी सीएसएस शैलियों या छवियों को प्रदर्शित करने में विफल रहता है। मेरे व्यवस्थापक साइट वर्तमान में लगता है कि:

(ठीक है, मैं एक छवि को शामिल किया है, लेकिन ढेर अतिप्रवाह मुझे नहीं लगा कि यह हर किसी ने इस विषय पर पोस्ट किया जाता है के व्यवस्थापक पृष्ठ की तरह दिखता है यह कहना पर्याप्त, Apache not serving django admin static files देखते हैं।)

मेरे लॉगिन पेज और कुछ गतिशील सामग्री जैसे अनुप्रयोग टुकड़े ठीक काम करते हैं, लेकिन जब मैं स्थिर सामग्री की सेवा करने का प्रयास करता हूं, तो मुझे 403 त्रुटि मिलती है। इसके अतिरिक्त जब मैं मैन्युअल रूप से व्यवस्थापक पृष्ठ का गाया एचटीएमएल देख रही है और मैं एक 403 त्रुटि मिलती है

http://localhost/static/admin/css/base.css 

पर स्टाइलशीट करने के लिए लिंक पर क्लिक करके स्टाइलशीट करने के लिए नेविगेट करने के लिए प्रयास करें। मैं टर्मिनल में वहां नेविगेट कर सकता हूं, और फ़ोल्डर के लिए अनुमतियों को बदल सकता हूं ताकि अपाचे के www-data उपयोगकर्ता को स्पष्ट रूप से सभी फ़ाइलों तक पहुंच हो।

#AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1 

Alias /media/ "/usr/local/wsgi/media/" 
Alias /static/ "/usr/local/wsgi/static/" 

<Directory "/usr/local/wsgi/static"> 
Order deny,allow 
Allow from all 
</Directory> 

<Directory "/usr/local/wsgi/media"> 
Order deny,allow 
Allow from all 
</Directory> 
WSGIScriptAlias/"/home/noah/Documents/Web/Basic/apache/django.wsgi" 

<Directory "/usr/local/wsgi/scripts"> 
Order allow,deny 
Allow from all 
</Directory> 

एक दोस्त की सलाह पर मैं अपने को ऊपर साइटों से उपलब्ध डिफ़ॉल्ट की नकल की:

यहाँ मेरी httpd.conf के प्रासंगिक टुकड़े हैं

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www 
    TypesConfig /etc/mime.types 
    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
    </Directory> 
    <Directory /home/noah/Documents/Web/Basic/apache/ > 
     Options -Indexes FollowSymLinks 
      AllowOverride AuthConfig FileInfo 
      Order allow,deny 
      Allow from all 
     </Directory> 
    <Directory /var/www/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride None 
     Order allow,deny 
     allow from all 
    </Directory> 
    SetEnv DJANGO_SETTINGS_MODULE Basic.settings 
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
    </Directory> 

#AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1 

Alias /media "/usr/local/wsgi/media/" 
Alias /static "/usr/local/wsgi/static/" 

<Directory "/usr/local/wsgi/static"> 
Order deny,allow 
Allow from all 
</Directory> 

<Directory "/usr/local/wsgi/media"> 
Order deny,allow 
Allow from all 
</Directory> 
WSGIScriptAlias/"/home/noah/Documents/Web/Basic/apache/django.wsgi" 

<Directory "/usr/local/wsgi/scripts"> 
Order allow,deny 
Allow from all 
</Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

</VirtualHost> 

यहाँ है मेरी django.wsgi

import os 
import sys 

path = '/home/noah/Documents/Web/Basic' 
if path not in sys.path: 
    sys.path.append(path) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'Basic.settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

और अंत में, यहाँ मेरी settings.py है:

# Absolute filesystem path to the directory that will hold user-uploaded files. 
# Example: "/home/media/media.lawrence.com/media/" 
MEDIA_ROOT = '/usr/local/wsgi/media/' 

# URL that handles the media served from MEDIA_ROOT. Make sure to use a 
# trailing slash. 
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/" 
MEDIA_URL = 'http://localhost/media/' 

# Absolute path to the directory static files should be collected to. 
# Don't put anything in this directory yourself; store your static files 
# in apps' "static/" subdirectories and in STATICFILES_DIRS. 
# Example: "/home/media/media.lawrence.com/static/" 
STATIC_ROOT = '/usr/local/wsgi/static/' 

# URL prefix for static files. 
# Example: "http://media.lawrence.com/static/" 
STATIC_URL = 'http://localhost/static/' 

# Additional locations of static files 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

# List of finder classes that know how to find static files in 
# various locations. 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

# Make this unique, and don't share it with anybody. 
SECRET_KEY = 'bmc&amp;epl=#u)r3elkvj#@90*cji*z^[email protected](ih' 

# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ROOT_URLCONF = 'Basic.urls' 

# Python dotted path to the WSGI application used by Django's runserver. 
WSGI_APPLICATION = 'Basic.wsgi.application' 

मेरे Django परियोजना में ~/दस्तावेज़/वेब/जो/var/www सांकेतिक रूप से लिंक है 'मूल के जीवन/

किसी भी मदद की बहुत सराहना की है, और अगर आप किसी भी अधिक फ़ाइलों की जरूरत है मुझे पता है/जानकारी।

+0

संभावित डुप्लिकेट [अपाचे django व्यवस्थापक स्थिर फाइलों की सेवा नहीं कर रहा है] (http://stackoverflow.com/questions/9500598/apache-not-serving-django-admin-static-files) – dm03514

+0

अंतर django संस्करण में निहित है अलग-अलग विशेषताएं हैं, और वहां समाधान सिर्फ मेरे लिए काम नहीं करता है। – noah

उत्तर

8

मुझे इस समस्या का भी सामना करना पड़ा।

मैं /var/www में स्थिर फ़ाइलों को के रूप में सुझाव नहीं दे सकता।

apache2.conf को जोड़कर हल:

<Directory /usr/local/django_apps/myapp/static> 
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Require all granted 
</Directory> 
+0

मैं चेक को आपके समाधान में ले जाऊंगा, क्योंकि लोकतंत्र – noah

+0

मुझे आश्चर्य है कि इसे 'apache.conf' में क्यों सेट किया जाना चाहिए और vhosts फ़ाइलों के भीतर पर्याप्त नहीं है ... – dcolumbus

+0

मैं सहमत हूं, इसे सेट करने के लिए सबसे अच्छा अभ्यास एक कस्टम "साइट्स-उपलब्ध" conf फ़ाइल –

1

मैंने इसे समझ लिया। मैंने सभी फाइलों को स्थैतिक और मीडिया फ़ाइलों को/var/www में स्थानांतरित कर दिया और अपाचे बहुत खुश लग रहा है

3

एक और संभावना स्थिर रूट निर्देशिका में एक लापता अनुगामी स्लेश होगा। निम्नलिखित विन्यास 403 त्रुटियों में जिसके परिणामस्वरूप किया गया था:

WSGIPythonPath /home/foo/app/ 
WSGIPythonHome /home/foo/.envs/foo 

<VirtualHost *:80> 
    Alias /static/ /home/foo/assets 
    ServerAdmin [email protected] 
    WSGIScriptAlias//home/foo/app/wsgi.py 
    ErrorLog ${APACHE_LOG_DIR}/app_wsgi_error.log 
    CustomLog ${APACHE_LOG_DIR}/app_wsgi_access.log combined 
    <Directory /home/foo/app/> 
     <Files wsgi.py> 
      Require all granted 
     </Files> 
    </Directory> 
    <Directory /home/foo/assets> 
     Require all granted 
    </Directory> 
</VirtualHost> 

/home/foo/assets को स्लैश जोड़ने के बाद, सब कुछ पूरी तरह से काम किया। मुझे उम्मीद है कि भविष्य में Googlers मदद करता है।

+0

यह एकमात्र चीज है जो काम करती है! – anukul

संबंधित मुद्दे