2016-10-06 6 views
1

Debian 8 VPSでDjangoアプリケーションをデプロイする際に問題があります。 Pythonバージョン2.7、Django 1.10.2。Django、uwsgi静的ファイルがcollectstaticの後でも提供されない

私の問題は、 'collectstatic'を実行してSTATIC_ROOTディレクトリを割り当てた後でも、本番モードの静的ファイル(DEBUG = False)を提供しないということです。

私はこの展開(nginx、uwsgi、python)に関するすべての指示に従ってきましたが、まだすべての静的ファイルに対して404を取得しています。 collectstaticを実行すると、すべてのファイルがアプリケーションの上部にある/ static /ディレクトリに置かれます。 uwsgiまたは開発サーバーを実行すると、HTMLとPythonの機能は正常ですが、すべての静的CSS、JS、IMGにはアクセスできません。

DEBUG = Trueに切り替えてdevサーバーを実行すると、静的ファイルが再び表示されます。

誰かが見て、私が間違っていることができますか?ファイルのコンテキストが必要な場合は、私に知らせてください。次のように

私のsettings.pyを読み取ります

""" 
Django settings for mysite project. 

Generated by 'django-admin startproject' using Django 1.10.2. 

For more information on this file, see 
https://docs.djangoproject.com/en/1.10/topics/settings/ 

For the full list of settings and their values, see 
https://docs.djangoproject.com/en/1.10/ref/settings/ 
""" 

import os 
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 


# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ 

# SECURITY WARNING: keep the secret key used in production secret! 
SECRET_KEY = 'removedforstackoverflow' 

# SECURITY WARNING: don't run with debug turned on in production! 
DEBUG = False 

ALLOWED_HOSTS = ['removedforstackoverflow'] 


# Application definition 

INSTALLED_APPS = [ 
    'main', 
    'instant', 
    'opengig', 
    'widget_tweaks', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

ROOT_URLCONF = 'mysite.urls' 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 

WSGI_APPLICATION = 'mysite.wsgi.application' 


# Database 
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 


# Password validation 
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 


# Internationalization 
# https://docs.djangoproject.com/en/1.10/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 


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

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, "static/") 

は、ここで私は私の静的ファイルを呼び出すheader.htmlファイルです。それが単なるブートストラップだったのであれば、私はCDNを使用したいと思いますが、私はいくつかのイメージを使用しています。このアプリケーションが非常に小さいときに静的ファイルをホストするためだけにサーバを設定したいとは思いません。開発サーバから

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Instant Backoffice</title> 
    <meta charset="utf-8" /> 
    {% load staticfiles %} 
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}" type = "text/css"/> 
    <meta name="viewport" content = "width=device-width, initial-scale=1.0"> 
</head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script> 
<body> 
    <nav class="navbar navbar-default"> 
     <div class="container-fluid"> 
      <div class="navbar-header"> 
       <a class="navbar-brand" href="/"> 
        <img alt="Brand" src="{% static 'img/logo.svg' %}" height="25"> 
       </a> 
      </div> 
      <ul class="nav navbar-nav navbar-right"> 
       <ul class="nav nav-pills"> 
        <li><a href="/instant/allorders">List of Orders</a></li> 
        <li><a href="/instant/payment">Change Payment Status</a></li> 
        <li><a href="/instant/review">Add a Review</a></li> 
        <li><a href="/instant/cancel">Cancel an Order</a></li> 
        <li><a href="/logout/">Logout</a></li> 
       </ul> 
      </li> 
     </ul> 
    </div> 
</nav> 
<div class="row"> 
    <div class='container-fluid'> 
     <div class="col-sm-12"> 
      {% block content %} 
      {% endblock %} 
     </div> 
    </div> 
    </div> 
</body> 
</html> 

エラーリストは:私が言ったように

[06/Oct/2016 23:40:43] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 102 
[06/Oct/2016 23:40:43] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 100 
[06/Oct/2016 23:40:44] "GET /static/img/logo.svg HTTP/1.1" 404 93 
[06/Oct/2016 23:40:44] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 100 
[06/Oct/2016 23:40:44] "GET /static/img/logo.svg HTTP/1.1" 404 93 
[06/Oct/2016 23:40:44] "GET /static/img/bg.jpg HTTP/1.1" 404 91 

、私は404のを取得していると私はその理由を理解していません。どんな助けも素晴らしいだろう。

+0

リバースプロキシとしてNginXを使用している場合は、スタティックコンテンツを提供するためにuWSGIを使用しないでください。 uWSGIとNginXの設定を投稿してください。 – Selcuk

答えて

2

urls.pyプロダクションの静的ファイルを提供するようにプロジェクトのファイルが更新されていることを確認する必要があります。

プロジェクトのurls.pyファイルを次のコードで更新します。

from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    # ... the rest of your URLconf goes here ... 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

もう一つは、私もあなたのsettings.pyファイル内の任意のSTATICFILES_DIRSディレクトリが表示されません。 ./manage.py collectstaticコマンドを実行したときに、静的ディレクトリの静的資産をすべてルートstaticディレクトリに収集するように、更新する必要があります。これはDjangoのベストプラクティスです。STATIC_ROOTディレクトリに直接静的ファイルを置く製造。

+0

ありがとう、これは私のdjango 1.10.5で動作します。 – zhihong

+0

静的ファイルを提供するようにwsgiを設定するとします。静的ファイルを扱うためにdjangoを設定する必要があるのはなぜですか? – Stephan

関連する問題