you without whitenoise the staticfiles static_root filesystem djangowhitenoise disable deploy app python django heroku deployment collectstatic

python - without - Error de recopilación estática al implementar la aplicación Django en Heroku



whitenoise django (6)

Estoy tratando de implementar una aplicación Django en Heroku, comienza a compilar, descargar e instalar todo, pero eso es lo que obtengo cuando se trata de recopilar archivos estáticos.

$ python manage.py collectstatic --noinput 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 390, 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 441, 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 98, in collect remote: for path, storage in finder.list(self.ignore_patterns): remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/finders.py", line 112, in list remote: for path in utils.get_files(storage, ignore_patterns): remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/utils.py", line 28, in get_files remote: directories, files = storage.listdir(location) remote: File "/app/.heroku/python/lib/python2.7/site-packages/django/core/files/storage.py", line 300, in listdir remote: for entry in os.listdir(path): remote: OSError: [Errno 2] No such file or directory: ''/app/blogproject/static'' 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: https://devcenter.heroku.com/articles/django-assets remote: remote: ! Push rejected, failed to compile Python app remote: remote: Verifying deploy... remote: remote: ! Push rejected to pin-a-voyage.

Este es todo el archivo settings.py

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os import dj_database_url BASE_DIR = os.path.dirname(os.path.dirname(__file__)) PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) # 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 = ''*********************'' # SECURITY WARNING: don''t run with debug turned on in production! DEBUG = True # Application definition INSTALLED_APPS = ( ''django.contrib.admin'', ''django.contrib.auth'', ''django.contrib.contenttypes'', ''django.contrib.sessions'', ''django.contrib.messages'', ''django.contrib.staticfiles'', ''blog'', ''custom_user'', ''django_markdown'', ''parsley'', ) #### AUTH ### AUTH_USER_MODEL = ''custom_user.CustomUser'' AUTHENTICATION_BACKENDS = ( ''custom_user.backends.CustomUserAuth'', ''django.contrib.auth.backends.ModelBackend'', # ''django.contrib.auth.backends.RemoteUserBackend'', ) ############# #### EMAIL ### EMAIL_USE_TLS = True EMAIL_BACKEND = ''django.core.mail.backends.smtp.EmailBackend'' EMAIL_HOST = ''smtp.gmail.com'' EMAIL_HOST_PASSWORD = ''***'' #my gmail password EMAIL_HOST_USER = ''[email protected]'' #my gmail username DEFAULT_FROM_EMAIL = ''[email protected]'' SERVER_EMAIL = ''[email protected]'' EMAIL_PORT = 587 DEFAULT_FROM_EMAIL = EMAIL_HOST_USER ############## 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'', ) ROOT_URLCONF = ''blogproject.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 = ''blogproject.wsgi.application'' # Database # https://docs.djangoproject.com/en/1.8/ref/settings/#databases DATABASES = { ''default'': { ''ENGINE'': ''django.db.backends.postgresql_psycopg2'', ''NAME'': ''blogproject'', ''USER'': ''***'', ''PASSWORD'': ''***'', ''HOST'': ''localhost'', ''PORT'': '''', } } # Internationalization # https://docs.djangoproject.com/en/1.8/topics/i18n/ LANGUAGE_CODE = ''en-us'' TIME_ZONE = ''UTC'' USE_I18N = True USE_L10N = True USE_TZ = True # Update database configuration with $DATABASE_URL. db_from_env = dj_database_url.config(conn_max_age=500) DATABASES[''default''].update(db_from_env) # Honor the ''X-Forwarded-Proto'' header for request.is_secure() SECURE_PROXY_SSL_HEADER = (''HTTP_X_FORWARDED_PROTO'', ''https'') # Allow all host headers ALLOWED_HOSTS = [''*''] # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.8/howto/static-files/ STATIC_ROOT = os.path.join(PROJECT_ROOT, ''staticfiles'') STATIC_URL = ''/static/'' # Extra places for collectstatic to find static files. STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, ''static''), ) # Simplified static file serving. # https://warehouse.python.org/project/whitenoise/ STATICFILES_STORAGE = ''whitenoise.django.GzipManifestStaticFilesStorage''

Esta es la estructura del proyecto.

blog-project -- blog -- migrations -- static -- templates -- blogproject -- blogprojectenv -- custom_user -- media -- .git

¿Alguna idea?


Acabo de actualizar a Django 1.10 hoy y tuve el mismo problema. Tu configuración estática es idéntica a la mía también.

Esto funcionó para mí, ejecute los siguientes comandos:

  1. Deshabilita la recopilación estática durante un despliegue.

    heroku config:set DISABLE_COLLECTSTATIC=1

  2. desplegar

    git push heroku master

  3. ejecutar migraciones (django 1.10 agregó al menos una)

    heroku run python manage.py migrate

  4. corre collectstatic usando bower

    heroku run ''bower install --config.interactive=false;grunt prep;python manage.py collectstatic --noinput''

  5. habilitar collecstatic para futuras implementaciones

    heroku config:unset DISABLE_COLLECTSTATIC

  6. Pruébalo por tu cuenta (opcional)

    heroku run python manage.py collectstatic

Los despliegues futuros deberían funcionar normalmente de ahora en adelante.


Ejecute python manage.py collectstatic localmente y corrija los errores. En mi caso, hubo errores de referencia que impidieron que ese comando se ejecutara con éxito.


Hoy en día, no todos los requisitos se $ pipenv install django correctamente con $ pipenv install django de heroku-django-template y $ pip install -r requirements.txt Requirements.txt.

La última versión de la plantilla incluye una carpeta /static con humans.txt , por lo que la solución anterior probablemente no sea la correcta.

Intente ejecutar $ pipenv install whitenoise y luego $ pip freeze > requirements.txt $ pipenv install whitenoise .

Si eso funciona, recomendaría $ pip install psycopg2 --ignore-installed y $ pip freeze > requirements.txt $ pip install psycopg2 --ignore-installed también, de lo contrario, también tendrá problemas para migrar.


Me parece que está teniendo problemas para crear esa carpeta blogproject/static . Veo que tienes una carpeta estática dentro de la aplicación de tu blog, pero debería subir un nivel en tu carpeta de proyectos de blog.

Intenta crear una carpeta static dentro de tu carpeta de blogproject y ese error debería desaparecer.


Tienes STATICFILES_DIRS configurado para esperar un directorio static en el mismo directorio que tu archivo settings.py , así que asegúrate de que no esté en otro lugar.

Además, ¿tienes algún archivo en ese directorio static ? Si no lo hace, entonces git no lo rastreará y, aunque existe localmente, no existirá en git. La solución habitual para esto es crear un archivo vacío llamado .keep en el directorio que garantice que git lo .keep . Pero una vez que tenga algunos archivos estáticos en este directorio, ya no será un problema.


esto funcionó para mí:

heroku config:set DISABLE_COLLECSTATIC=1

y después:

git push heroku master