Tengo un sitio Django 1.9.6 implementado en Heroku. Cuando DEBUG=False recibía un error del servidor (500). Los registros no contenían información útil, así que intenté ejecutarlo con DEBUG=True. Ahora funciona bien. Creo que creo el problema puede estar relacionado con el procesamiento de mi archivo scss, lo que realmente me confunde y con el que estaba luchando. Recientemente, entre otras cosas, agregué COMPRESS_OFFLINE = True a mis archivos de configuración, y comentar eso parece aliviar el problema (aunque mis archivos scss no funcionan).

Algunos de mis estáticos settings.py. Avíseme si necesita más; mucho de esto es un misterio para mí. Intenté seguir esto lo mejor que pude.

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        # other finders..
        'compressor.finders.CompressorFinder',
    )

    STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

    MEDIA_URL = "/media/"
    MEDIA_ROOT = os.path.join(BASE_DIR, "media/")

En urls.py:

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += [
    url(r'^media/(?P<path>.*)$', serve, {
        'document_root': settings.MEDIA_ROOT
    }),
]

urlpatterns += staticfiles_urlpatterns()

Editar:

He iniciado sesión para trabajar y he confirmado que se trata de un error de compresión. Recibo el mensaje de error:

Internal Server Error: /

OfflineGenerationError at /
You have offline compression enabled but key "171c3b7763dbc51a465d996f7d920cf5" is missing from offline manifest. You may need to run "python manage.py compress".

Que es lo mismo que obtuve localmente, excepto que ejecutar el comando sugerido lo resolvió. Ejecutar heroku run python manage.py compress no tiene efecto (sin embargo, no hay errores al ejecutarlo)

8
thumbtackthief 16 feb. 2017 a las 03:09

4 respuestas

La mejor respuesta

El manifiesto generado por la compresa se almacenó en mi .gitignore y, por lo tanto, el de producción estaba obsoleto. Agregarlo al repositorio de git solucionó todo.

3
thumbtackthief 26 feb. 2017 a las 02:49

Agregue esto a su settings.py dentro de la sección loggers y debería darle más información (esto es lo que me ayudó a resolver el mismo problema).

"django.request": {
  "handlers": ["console"],
  "level": "ERROR",
  "propagate": True
}

Para lo que vale, aquí están mis configuraciones similares de settings.py:

MEDIA_URL = "http://%s.s3.amazonaws.com/" % (AWS_STORAGE_BUCKET_NAME)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = os.getenv("DJANGO_STATIC_HOST", "") + "/static/"
if DEBUG:
  STATIC_URL = "/static/"
STATICFILES_DIRS = (
  os.path.join(BASE_DIR, 'static'),
)

Nota: No tengo MEDIA_ROOT o STATICFILES_FINDERS y también estoy usando Whitenoise con CloudFront para mi manejo de archivos estáticos

1
themanatuf 20 feb. 2017 a las 19:32

Hoy intenté compartir un sitio web con 'PythonAnywhere'. He encontrado el mismo problema y he solucionado el problema con 'Allow_Host'.

https://docs.djangoproject.com/en/1.10/ref/settings/#allowed-hosts

Settings.py

 ALLOWED_HOSTS = ['*']
0
Tolgahan ÜZÜN 16 feb. 2017 a las 00:42

Primero fuera del valor establecido para ALLOW_HOSTS, esto no puede estar en blanco cuando la depuración está desactivada.

ALLOWED_HOSTS = ['.mydomain.com', '.2nddomain.com']

Porque usas complementos de compresión: SET

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True

# this where the collectstatic and compress result output
# point your static alias to here 
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# in your production env: activate ur virtual environment then run the compress statics command
python manage.py compress
python manage.py collectstatic

Cuando Debug está desactivado, se suprimen todas las excepciones por razones de seguridad, configure el correo electrónico de administrador en el archivo de configuración para permitir que django envíe por correo electrónico todas las excepciones no detectadas

SERVER_EMAIL = 'ur@from-email-address.com'
ADMINS = (
    ('Exceptions Email', 'destination@email.com'),
)
2
Du D. 22 feb. 2017 a las 13:09