您好,请原谅我的英文
此错误很奇怪,直到现在我才能将我的Django应用程序和数据库推送到heroku,这是我的配置
项目结构:
.
├── apps
│ ├── home
│ │ ├── admin.py
│ │ ├── admin.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── models.pyc
│ │ ├── templates
│ │ ├── tests.py
│ │ ├── urls.py
│ │ ├── urls.pyc
│ │ ├── views.py
│ │ └── views.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── inventario
│ │ ├── admin.py
│ │ ├── admin.pyc
│ │ ├── forms.py
│ │ ├── forms.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── models.pyc
│ │ ├── templates
│ │ ├── tests.py
│ │ ├── urls.py
│ │ ├── urls.pyc
│ │ ├── views.py
│ │ └── views.pyc
│ ├── ordenes_trabajo
│ │ ├── admin.py
│ │ ├── admin.pyc
│ │ ├── forms.py
│ │ ├── forms.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── models.pyc
│ │ ├── templates
│ │ ├── tests.py
│ │ ├── urls.py
│ │ ├── urls.pyc
│ │ ├── views.py
│ │ └── views.pyc
│ ├── sucursales
│ │ ├── admin.py
│ │ ├── admin.pyc
│ │ ├── forms.py
│ │ ├── forms.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── models.pyc
│ │ ├── templates
│ │ ├── tests.py
│ │ ├── urls.py
│ │ ├── urls.pyc
│ │ ├── views.py
│ │ └── views.pyc
│ ├── usuarios
│ │ ├── admin.py
│ │ ├── admin.pyc
│ │ ├── forms.py
│ │ ├── forms.pyc
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── models.pyc
│ │ ├── templates
│ │ ├── tests.py
│ │ ├── urls.py
│ │ ├── urls.pyc
│ │ ├── views.py
│ │ └── views.pyc
│ └── ventas_cotizaciones
│ ├── admin.py
│ ├── admin.pyc
│ ├── forms.py
│ ├── forms.pyc
│ ├── htmltopdf.py
│ ├── htmltopdf.pyc
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── migrations
│ ├── models.py
│ ├── models.pyc
│ ├── templates
│ ├── tests.py
│ ├── urls.py
│ ├── urls.pyc
│ ├── views.py
│ └── views.pyc
├
├── __init__.py
├── manage.py
├── prerequirements_install.txt
├── Procfile
├── proyecto_www
│ ├── db.sqlite3
│ ├── __init__.py
│ ├
│ ├── README.md
│ ├── settings
│ │ ├── base.py
│ │ ├── base.pyc
│ │ ├── __init__.py
│ │ ├
│ │ ├── local.py
│ │ ├
│ │ ├── production.py
│ │ ├── staging.py
│ │ └── staging.pyc
│ ├── urls.py
│ ├
│ ├── wsgi.py
│ └
├── requirements.txt
├── static
我将设置拆分为:
设置/ base.py
from unipath import Path
import os
BASE_DIR = Path(__file__).ancestor(3)
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'THE SECRET KEY OF MY APP'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['*']
# Application definition
DJANGO_APPS = (
...
)
LOCAL_APPS = (
...
)
THIRD_PARTY_APPS = (
...
)
INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS + THIRD_PARTY_APPS
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
)
ROOT_URLCONF = 'proyecto_www.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'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 = 'proyecto_www.wsgi.application'
STATIC_URL = '/static/'
STATICFILES_DIRS=(BASE_DIR,'static',)
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR.child('media')
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'es'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_METHODS = (
...
)
我用于部署的设置/ staging.py
from .base import *
DEBUG_TOOLBAR_PATCH_SETTINGS = False
DEBUG = True
TEMPLATE_DEBUG = True
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
...
}
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_ROOT = 'staticfiles'
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
我的Procfile是:
web: gunicorn proyecto_www.wsgi --log-file -
我的wsgi.py是:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proyecto_www.settings.staging")
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(get_wsgi_application())
初始错误是" SECRET_KEY设置不能为空"
所以我按照这里的答案 Django. Using multiple settings files with Heroku
并使用命令:
heroku config:set DJANGO_SETTINGS_MODULE=proyecto_www.settings.staging
现在我收到了这个错误:
remote: Successfully installed BeautifulSoup-3.2.1 Django-1.8.4 Pillow-3.0.0 PyPDF2-1.25.1 Unipath-1.1 dj-database-url-0.3.0 dj-static-0.0.6 django-cors-headers-1.1.0 django-datatable-view-0.8.3 django-toolbelt-0.0.1 gunicorn-19.4.1 html5lib-0.9999999 psycopg2-2.6.1 python-dateutil-2.4.2 reportlab-3.2.0 six-1.10.0 static3-0.6.1 wheel-0.24.0 whitenoise-2.0.6 xhtml2pdf-0.0.6 xlwt-0.7.4
remote:
remote: $ python manage.py collectstatic --noinput
remote: Post-processing 'tmp/cache/tmp_app_dir/vendor/ruby-2.3.0/lib/ruby/2.3.0/rdoc/generator/template/darkfish/css/rdoc.css' failed!
remote: Traceback (most recent call last):
remote: File "manage.py", line 10, in <module>
remote: execute_from_command_line(sys.argv)
remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
remote: utility.execute()
remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute
remote: self.fetch_command(subcommand).run_from_argv(self.argv)
remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv
remote: self.execute(*args, **cmd_options)
remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute
remote: output = self.handle(*args, **options)
remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle
remote: collected = self.collect()
remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 120, in collect
remote: raise processed
remote: whitenoise.django.MissingFileError: The file 'tmp/cache/tmp_app_dir/vendor/ruby-2.3.0/lib/ruby/2.3.0/rdoc/generator/template/darkfish/css/images/wrench_orange.png' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7fe55e8ec4d0>.
remote: The CSS file 'tmp/cache/tmp_app_dir/vendor/ruby-2.3.0/lib/ruby/2.3.0/rdoc/generator/template/darkfish/css/rdoc.css' references a file which could not be found:
remote: tmp/cache/tmp_app_dir/vendor/ruby-2.3.0/lib/ruby/2.3.0/rdoc/generator/template/darkfish/css/images/wrench_orange.png
remote: Please check the URL references in this CSS file, particularly any
remote: relative paths which might be pointing to the wrong location.
remote:
remote: ! Error while running '$ python manage.py collectstatic --noinput'.
remote: See traceback above for details.
remote:
remote: You may need to update application code to resolve this error.
remote: Or, you can disable collectstatic for this application:
remote:
remote: $ heroku config:set DISABLE_COLLECTSTATIC=1
remote:
remote: http://devcenter.heroku.com/articles/django-assets
remote:
remote: ! Push rejected, failed to compile Python app
答案 0 :(得分:2)
解决方法是从settings / staging.py
中删除此行STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
并像这样更改wsgi.py:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proyecto_www.settings.staging")
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
djang-toolbelt django-toolbelt或dj-static
答案 1 :(得分:0)
这看起来不对:
STATICFILES_DIRS=(BASE_DIR,'static',)
我想你可能想要这样的东西:
STATICFILES_DIRS=(BASE_DIR.child('static'),)
您收到的错误消息的重要部分是:
The CSS file 'tmp/cache/tmp_app_dir/vendor/ruby-2.3.0/lib/ruby/2.3.0/rdoc/generator/template/darkfish/css/rdoc.css' references a file which could not be found:
tmp/cache/tmp_app_dir/vendor/ruby-2.3.0/lib/ruby/2.3.0/rdoc/generator/template/darkfish/css/images/wrench_orange.png
我认为该文件不属于您的静态资源,但由于STATICFILES_DIRS
设置错误而导致该文件被包含在内。