Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mezzanine - Can't load css and js in Heroku

I'm having some problems hosting a simple website I've created in Heroku. The website was created using Mezzanine and uses whitenoise and gunicorn. The problem is: I'm getting 404 error in some static resources, like css and js. You can see the problems at http://blrg-advogados.herokuapp.com.

This is the Procfile content:

web: python manage.py collectstatic --noinput; gunicorn --workers=4 site_advogados.wsgi 0.0.0.0:$PORT

wsgi.py

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_advogados.settings")

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

and here is some part of settings.py:

ALLOWED_HOSTS = ['*']
DEBUG = False
PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

MEDIA_URL = STATIC_URL + "media/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT, *MEDIA_URL.strip("/").split("/"))
ROOT_URLCONF = "%s.urls" % PROJECT_APP
TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, "templates"),)

urls.py is like this:

from __future__ import unicode_literals
from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from mezzanine.core.views import direct_to_template
from mezzanine.conf import settings
from views import contato

admin.autodiscover()

urlpatterns = i18n_patterns("",
                        ("^admin/", include(admin.site.urls)),
                        )

if settings.USE_MODELTRANSLATION:
    urlpatterns += patterns('',
                        url('^i18n/$', 'django.views.i18n.set_language', name='set_language'),
                        )

urlpatterns += patterns('',
                    url("^$", direct_to_template, {"template": "index.html"}, name="home"),
                    url(r'^contato/$', contato, name='contato'),
                    ("^", include("mezzanine.urls")),
                    )

handler404 = "mezzanine.core.views.page_not_found"
handler500 = "mezzanine.core.views.server_error"

Log:

2015-12-27T12:44:56.109833+00:00 app[web.1]: Traceback (most recent call last):
2015-12-27T12:44:56.109850+00:00 app[web.1]:     self.handle_request(listener, req, client, addr)
2015-12-27T12:44:56.109851+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 171, in handle_request
2015-12-27T12:44:56.109852+00:00 app[web.1]:     respiter = self.wsgi(environ, resp.start_response)
2015-12-27T12:44:56.109853+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/whitenoise/base.py", line 119, in __call__
2015-12-27T12:44:56.109854+00:00 app[web.1]:     return self.application(environ, start_response)
2015-12-27T12:44:56.109855+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
2015-12-27T12:44:56.109855+00:00 app[web.1]:     response = self.get_response(request)
2015-12-27T12:44:56.109857+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 175, in get_response
2015-12-27T12:44:56.109858+00:00 app[web.1]:     response = self.get_exception_response(request, resolver, 404)
2015-12-27T12:44:56.109858+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 90, in get_exception_response
2015-12-27T12:44:56.109861+00:00 app[web.1]:     return callback(request, **param_dict)
2015-12-27T12:44:56.109863+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/mezzanine/core/views.py", line 222, in server_error
2015-12-27T12:44:56.109861+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
2015-12-27T12:44:56.109859+00:00 app[web.1]:     response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
2015-12-27T12:44:56.109862+00:00 app[web.1]:     response = view_func(request, *args, **kwargs)
2015-12-27T12:44:56.109860+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 268, in handle_uncaught_exception
2015-12-27T12:44:56.109864+00:00 app[web.1]:     return HttpResponseServerError(t.render(context))
2015-12-27T12:44:56.109864+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render
2015-12-27T12:44:56.109865+00:00 app[web.1]:     return self.template.render(context)
2015-12-27T12:44:56.109866+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 209, in render
2015-12-27T12:44:56.109866+00:00 app[web.1]:     return self._render(context)
2015-12-27T12:44:56.109867+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.109868+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.109869+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.109870+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.109870+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.109871+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.109872+00:00 app[web.1]:     return compiled_parent._render(context)
2015-12-27T12:44:56.109872+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/loader_tags.py", line 135, in render
2015-12-27T12:44:56.109874+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.109873+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.109875+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.109875+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.109878+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/templatetags/static.py", line 105, in render
2015-12-27T12:44:56.109876+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.109877+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.109878+00:00 app[web.1]:     url = self.url(context)
2015-12-27T12:44:56.109879+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 16, in url
2015-12-27T12:44:56.109880+00:00 app[web.1]:     return static(path)
2015-12-27T12:44:56.109882+00:00 app[web.1]:     return staticfiles_storage.url(path)
2015-12-27T12:44:56.109881+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 9, in static
2015-12-27T12:44:56.109884+00:00 app[web.1]:     hashed_name = self.stored_name(clean_name)
2015-12-27T12:44:56.109883+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 131, in url
2015-12-27T12:44:56.109884+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 280, in stored_name
2015-12-27T12:44:56.109885+00:00 app[web.1]:     cache_name = self.clean_name(self.hashed_name(name))
2015-12-27T12:44:56.109886+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 94, in hashed_name
2015-12-27T12:44:56.109886+00:00 app[web.1]:     (clean_name, self))
2015-12-27T12:44:56.109887+00:00 app[web.1]: ValueError: The file 'img/favicon.ico' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7f6dc4a1e2d0>.
2015-12-27T12:44:56.329261+00:00 app[web.1]: [2015-12-27 12:44:56 +0000] [15] [ERROR] Error handling request
2015-12-27T12:44:56.329266+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle
2015-12-27T12:44:56.329265+00:00 app[web.1]: Traceback (most recent call last):
2015-12-27T12:44:56.329268+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 171, in handle_request
2015-12-27T12:44:56.329267+00:00 app[web.1]:     self.handle_request(listener, req, client, addr)
2015-12-27T12:44:56.329270+00:00 app[web.1]:     respiter = self.wsgi(environ, resp.start_response)
2015-12-27T12:44:56.329272+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/whitenoise/base.py", line 119, in __call__
2015-12-27T12:44:56.329287+00:00 app[web.1]:     return self.application(environ, start_response)
2015-12-27T12:44:56.329288+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 189, in __call__
2015-12-27T12:44:56.329288+00:00 app[web.1]:     response = self.get_response(request)
2015-12-27T12:44:56.329289+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 175, in get_response
2015-12-27T12:44:56.329290+00:00 app[web.1]:     response = self.get_exception_response(request, resolver, 404)
2015-12-27T12:44:56.329290+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 90, in get_exception_response
2015-12-27T12:44:56.329292+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 268, in handle_uncaught_exception
2015-12-27T12:44:56.329291+00:00 app[web.1]:     response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
2015-12-27T12:44:56.329292+00:00 app[web.1]:     return callback(request, **param_dict)
2015-12-27T12:44:56.329293+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py", line 110, in _wrapped_view
2015-12-27T12:44:56.329293+00:00 app[web.1]:     response = view_func(request, *args, **kwargs)
2015-12-27T12:44:56.329294+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/mezzanine/core/views.py", line 222, in server_error
2015-12-27T12:44:56.329295+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/backends/django.py", line 74, in render
2015-12-27T12:44:56.329294+00:00 app[web.1]:     return HttpResponseServerError(t.render(context))
2015-12-27T12:44:56.329296+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 209, in render
2015-12-27T12:44:56.329295+00:00 app[web.1]:     return self.template.render(context)
2015-12-27T12:44:56.329297+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.329296+00:00 app[web.1]:     return self._render(context)
2015-12-27T12:44:56.329297+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.329297+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.329298+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.329298+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.329299+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.329299+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/loader_tags.py", line 135, in render
2015-12-27T12:44:56.329300+00:00 app[web.1]:     return compiled_parent._render(context)
2015-12-27T12:44:56.329306+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 201, in _render
2015-12-27T12:44:56.329307+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 903, in render
2015-12-27T12:44:56.329307+00:00 app[web.1]:     return self.nodelist.render(context)
2015-12-27T12:44:56.329308+00:00 app[web.1]:     return node.render(context)
2015-12-27T12:44:56.329307+00:00 app[web.1]:     bit = self.render_node(node, context)
2015-12-27T12:44:56.329308+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/template/base.py", line 917, in render_node
2015-12-27T12:44:56.329310+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 16, in url
2015-12-27T12:44:56.329309+00:00 app[web.1]:     url = self.url(context)
2015-12-27T12:44:56.329313+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 94, in hashed_name
2015-12-27T12:44:56.329308+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/templatetags/static.py", line 105, in render
2015-12-27T12:44:56.329314+00:00 app[web.1]: ValueError: The file 'img/favicon.ico' could not be found with <whitenoise.django.GzipManifestStaticFilesStorage object at 0x7f6dc4a1e2d0>.
2015-12-27T12:44:56.329310+00:00 app[web.1]:     return static(path)
2015-12-27T12:44:56.329313+00:00 app[web.1]:     cache_name = self.clean_name(self.hashed_name(name))
2015-12-27T12:44:56.329312+00:00 app[web.1]:     hashed_name = self.stored_name(clean_name)
2015-12-27T12:44:56.329312+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 280, in stored_name
2015-12-27T12:44:56.329314+00:00 app[web.1]:     (clean_name, self))
2015-12-27T12:44:56.329311+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 131, in url
2015-12-27T12:44:56.329311+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 9, in static
2015-12-27T12:44:56.329311+00:00 app[web.1]:     return staticfiles_storage.url(path)
2015-12-27T12:44:56.330945+00:00 heroku[router]: at=info method=GET path="/favicon.ico/" host=blrg-advogados.herokuapp.com request_id=3c54ce79-8686-42a9-a335-f217abb8d6f2 fwd="177.36.203.24" dyno=web.1 connect=2ms service=31ms status=500 bytes=244

My project folder is like this:

Project layout

and the output of collect static is this:

Running python manage.py collectstatic --noinput on blrg-advogados... up, run.4811
Traceback (most recent call last):
File "manage.py", line 14, in <module>
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 343, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle
collected = self.collect()
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 98, in collect
for path, storage in finder.list(self.ignore_patterns):
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/finders.py", line 112, in list
for path in utils.get_files(storage, ignore_patterns):
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/staticfiles/utils.py", line 28, in get_files
directories, files = storage.listdir(location)
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/files/storage.py", line 300, in listdir
for entry in os.listdir(path):
OSError: [Errno 2] No such file or directory: '/app/site_advogados/static'

as you can imagine, when I set DEBUG = True it works correctly, but as I want test the production environment I need use DEBUG = False. What I'm doing wrong?

like image 839
brevleq Avatar asked Nov 02 '15 19:11

brevleq


1 Answers

You should not need to run collectstatic every time you start your web dyno. What is the output of heroku run python manage.py collectstatic --noinput?

Looking through the heroku docs, it is not clear if you have performed this step:

Django won’t automatically create the target directory that collectstatic uses, so we recommend adding a dummy file to your repository, as seen here.

like image 73
Steven Avatar answered Oct 19 '22 06:10

Steven