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:
Deshabilita la recopilación estática durante un despliegue.
heroku config:set DISABLE_COLLECTSTATIC=1
desplegar
git push heroku master
ejecutar migraciones (django 1.10 agregó al menos una)
heroku run python manage.py migrate
corre collectstatic usando bower
heroku run ''bower install --config.interactive=false;grunt prep;python manage.py collectstatic --noinput''
habilitar collecstatic para futuras implementaciones
heroku config:unset DISABLE_COLLECTSTATIC
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