At the end I used WhiteNoise. If anyone there wants to know about how I made the configuration, just write. :-)
On Sunday, 5 July 2015 09:00:43 UTC+2, Martín Torre Castro wrote: > > I have just read now your mail when awakening. I also love the work from > Danny and Audrey and got his las two books "2 scoops...". > > I will look about this links along today (kind of holidays here) and > answer soon. > > Thanks > El 5/7/2015 3:44 a. m., "Malik Rumi" <[email protected] <javascript:>> > escribió: > >> Hi Martin, >> >> First let me say unapologetically that I love PyDanny and his work and >> contributions to the Django community, especially Two Scoops. However, you >> should know that the philosophy he espouses there is very different from >> the one Heroku espouses. I've been told he talks about that somewhere, but >> I've never seen it personally. >> >> I won't go into too much detail, but you can read about it here: >> https://devcenter.heroku.com/articles/architecting-apps >> >> What you need more than anything is the Heroku Django template : >> https://devcenter.heroku.com/articles/django-app-configuration >> >> Try that first. Follow the directions carefully, then let us know if you >> still need help. >> >> >> On Saturday, July 4, 2015 at 7:13:39 PM UTC-5, Martin Torre Castro wrote: >>> >>> Hello, >>> >>> I'm developing a webapp with Django 1.7 (project_name is "sonata") and >>> the project layout from the "Two scoops of Django 1.6", so I have a 3-tier >>> basic folder tree. >>> >>> .├── requirements└── sonata >>> ├── person >>> │ └── templatetags >>> ├── registration >>> ├── sonata >>> │ └── settings >>> ├── static >>> │ ├── css >>> │ │ └── images >>> │ ├── fonts >>> │ └── js >>> ├── templates >>> │ ├── personApp >>> │ └── registrationApp >>> └── utils >>> └── templatetags >>> >>> >>> I have a problem when deploying on Heroku. I have achieved the >>> deployment, but the static files are not being served to the browser. >>> >>> I know I should force some way of serving the static files through the >>> settings and have googled about. I've seen many ways and read about using >>> Amazon services, but I'm looking for the easiest one, which will make the >>> future production deployment easy as well with gUnicorn (I hope). >>> >>> I tried modifying the settings file (which is the heroku.py one, which >>> overrides the base.py) and changing values for STATIC_ROOT, >>> STATICFILES_DIRS and adding the line: >>> >>> *urlpatterns += static(settings.MEDIA_URL, >>> document_root=settings.STATIC_ROOT)* >>> >>> I've tried as well running: >>> >>> *heroku run sonata/manage.py collectstatic* >>> >>> before doing >>> >>> *git push heroku master* >>> >>> but nothing happens, even checking with >>> >>> *heroku run ls sonata/assets * >>> >>> that the files are being copied. >>> >>> Please, I would like some orientation for really understanding what I'm >>> doing wrong and mending it. >>> >>> When finding out about heroku and deployment I met also some sample >>> ProcFiles which used a project_name.wsgi file and I don't know anything >>> about it. >>> >>> I could use use some help, because the more webs I read, the more >>> confused I get. Please assume I know very little about deployments. A link >>> would be useful, but it has to show newbie's material :-( >>> >>> Thank you very much on advance. >>> >>> >>> ####################################### *ProcFile* >>> ################################## >>> web: python sonata/manage.py runserver 0.0.0.0:$PORT --noreload >>> >>> >>> >>> >>> ####################################### *heroku.py* >>> ################################## >>> # -*- coding: utf-8 -*- >>> """Heroku settings and globals.""" >>> >>> from __future__ import absolute_import >>> >>> from .base import * >>> >>> from os import environ >>> >>> # TODO Warning! Heroku retrieve values as strings >>> # TODO we should check (only for Heroku) that 'True' and 'False' are >>> respectively True and False 0, >>> # or the equivalent ones, True and False >>> def get_env_setting(setting): >>> """ Gets the environment variable or an Exception. >>> This can be used, for example, for getting the SECRET_KEY and >>> not having it hardcoded in the source code >>> Also for setting the active settings file for local development, >>> heroku, production server, etc... """ >>> try: >>> return environ[setting] >>> except KeyError: >>> error_msg = "Set the %s env variable" % setting >>> raise ImproperlyConfigured(error_msg) >>> >>> ########## HOST CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/1.5/releases/1.5/#allowed-hosts-required-in-production >>> ALLOWED_HOSTS = ['*'] >>> ########## END HOST CONFIGURATION >>> >>> ########## EMAIL CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-backend >>> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-host >>> EMAIL_HOST = environ.get('EMAIL_HOST', 'smtp.gmail.com') >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-host-password >>> EMAIL_HOST_PASSWORD = environ.get('EMAIL_HOST_PASSWORD', '') >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-host-user >>> EMAIL_HOST_USER = environ.get('EMAIL_HOST_USER', ' >>> [email protected]') >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-port >>> EMAIL_PORT = environ.get('EMAIL_PORT', 587) >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix >>> EMAIL_SUBJECT_PREFIX = '[%s] ' % SITE_NAME >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#email-use-tls >>> EMAIL_USE_TLS = True >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#server-email >>> SERVER_EMAIL = EMAIL_HOST_USER >>> ########## END EMAIL CONFIGURATION >>> >>> ########## DATABASE CONFIGURATION >>> import dj_database_url >>> DATABASES['default'] = dj_database_url.config() >>> # DATABASES = {} >>> ########## END DATABASE CONFIGURATION >>> >>> >>> ########## CACHE CONFIGURATION >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#caches >>> CACHES = { >>> 'default': { >>> 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', >>> } >>> } >>> ########## END CACHE CONFIGURATION >>> >>> >>> ########## SECRET CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#secret-key >>> SECRET_KEY = get_env_setting('SECRET_KEY') >>> ########## END SECRET CONFIGURATION >>> >>> >>> >>> >>> ####################################### *base.py* >>> ################################## >>> >>> # -*- coding: utf-8 -*- >>> """Common settings and globals.""" >>> >>> from os.path import abspath, basename, dirname, join, normpath >>> from sys import path >>> >>> >>> from os import environ >>> >>> def get_env_setting(setting): >>> """ Gets the environment variable or an Exception. >>> This can be used, for example, for getting the SECRET_KEY and >>> not having it hardcoded in the source code >>> Also for setting the active settings file for local development, >>> heroku, production server, etc... """ >>> try: >>> return environ[setting] >>> except KeyError: >>> error_msg = "Set the %s env variable" % setting >>> raise ImproperlyConfigured(error_msg) >>> >>> >>> ########## PATH CONFIGURATION >>> # Absolute filesystem path to the Django project directory: >>> DJANGO_ROOT = dirname(dirname(abspath(__file__))) >>> >>> # Absolute filesystem path to the top-level project folder: >>> SITE_ROOT = dirname(DJANGO_ROOT) >>> >>> # Site name: >>> SITE_NAME = basename(DJANGO_ROOT) >>> >>> # Add our project to our pythonpath, this way we don't need to type >>> our project >>> # name in our dotted import paths: >>> path.append(DJANGO_ROOT) >>> ########## END PATH CONFIGURATION >>> >>> >>> ########## DEBUG CONFIGURATION >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#debug >>> DEBUG = False >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#template-debug >>> TEMPLATE_DEBUG = DEBUG >>> ########## END DEBUG CONFIGURATION >>> >>> >>> ########## MANAGER CONFIGURATION >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#admins >>> ADMINS = ( >>> ('Your Name', '[email protected]'), >>> ) >>> >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#managers >>> MANAGERS = ADMINS >>> ########## END MANAGER CONFIGURATION >>> >>> >>> ########## DATABASE CONFIGURATION >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#databases >>> DATABASES = { >>> 'default': { >>> 'ENGINE': 'django.db.backends.', >>> 'NAME': '', >>> 'USER': '', >>> 'PASSWORD': '', >>> 'HOST': '', >>> 'PORT': '', >>> } >>> } >>> ########## END DATABASE CONFIGURATION >>> >>> >>> ########## GENERAL CONFIGURATION >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#time-zone >>> TIME_ZONE = 'Europe/Madrid' >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#language-code >>> LANGUAGE_CODE = 'es-es' >>> DEFAULT_CHARSET = 'utf-8' >>> >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#site-id >>> SITE_ID = 1 >>> >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n >>> USE_I18N = True >>> >>> LOCALE_PATHS = (# Idiomas disponibles en la aplicación >>> SITE_ROOT + '/locale', >>> ) >>> >>> LANGUAGES = (# Ruta donde buscar ficheros de idioma >>> ('es', 'Español'), >>> ('gl', 'Galego'), >>> ('en', 'English'), >>> ('it', 'Italiano'), >>> ) >>> >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n >>> USE_L10N = True >>> >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#use-tz >>> USE_TZ = True >>> ########## END GENERAL CONFIGURATION >>> >>> >>> ########## MEDIA CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#media-root >>> MEDIA_ROOT = normpath(join(SITE_ROOT, 'media')) >>> >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url >>> MEDIA_URL = '/media/' >>> ########## END MEDIA CONFIGURATION >>> >>> >>> ########## STATIC FILE CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#static-root >>> STATIC_ROOT = normpath(join(SITE_ROOT, 'assets')) >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#static-url >>> STATIC_URL = '/static/' >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS >>> STATICFILES_DIRS = ( >>> normpath(join(SITE_ROOT, 'static')), >>> ) >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders >>> STATICFILES_FINDERS = ( >>> 'django.contrib.staticfiles.finders.FileSystemFinder', >>> 'django.contrib.staticfiles.finders.AppDirectoriesFinder', >>> ) >>> ########## END STATIC FILE CONFIGURATION >>> >>> ########## LOGIN REDIRECTION >>> # The URL you'd like to redirect users to that aren't logged in >>> LOGIN_URL = '/registration/login/' >>> ######################################### >>> >>> ########## LOGIN NOT REQUIRED >>> # Tuple of regular expressions that lists your exceptions to the >>> default login required on every page. >>> LOGIN_EXEMPT_URLS = ( >>> r'^registration/login\.html$', >>> r'^admin/', >>> ) >>> ######################################### >>> >>> ########## SECRET CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#secret-key >>> # Note: This key should only be used for development and testing. >>> SECRET_KEY = r"I am not going to show you my secret key, sorry" >>> ########## END SECRET CONFIGURATION >>> >>> >>> ########## SITE CONFIGURATION >>> # Hosts/domain names that are valid for this site >>> # See >>> https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts >>> ALLOWED_HOSTS = [] >>> ########## END SITE CONFIGURATION >>> >>> >>> ########## FIXTURE CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FIXTURE_DIRS >>> FIXTURE_DIRS = ( >>> normpath(join(SITE_ROOT, 'fixtures')), >>> ) >>> ########## END FIXTURE CONFIGURATION >>> >>> >>> ########## TEMPLATE CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors >>> TEMPLATE_CONTEXT_PROCESSORS = ( >>> 'django.contrib.auth.context_processors.auth', >>> 'django.core.context_processors.debug', >>> 'django.core.context_processors.i18n', >>> 'django.core.context_processors.media', >>> 'django.core.context_processors.static', >>> 'django.core.context_processors.tz', >>> 'django.contrib.messages.context_processors.messages', >>> 'django.core.context_processors.request', >>> ) >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#template-loaders >>> TEMPLATE_LOADERS = ( >>> 'django.template.loaders.filesystem.Loader', >>> 'django.template.loaders.app_directories.Loader', >>> ) >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#template-dirs >>> TEMPLATE_DIRS = ( >>> normpath(join(SITE_ROOT, 'templates')), >>> normpath(join(SITE_ROOT, 'templates/registration')), >>> normpath(join(SITE_ROOT, 'templates/person')), >>> ) >>> ########## END TEMPLATE CONFIGURATION >>> >>> >>> ########## MIDDLEWARE CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#middleware-classes >>> MIDDLEWARE_CLASSES = ( >>> # Default Django middleware. >>> 'django.contrib.sessions.middleware.SessionMiddleware', >>> 'django.middleware.locale.LocaleMiddleware', >>> 'django.middleware.common.CommonMiddleware', >>> 'django.middleware.csrf.CsrfViewMiddleware', >>> 'django.contrib.auth.middleware.AuthenticationMiddleware', >>> 'django.contrib.messages.middleware.MessageMiddleware', >>> 'django.middleware.clickjacking.XFrameOptionsMiddleware', >>> # Custom middleware >>> 'sonata.settings.middleware.LoginRequiredMiddleware', >>> ) >>> ########## END MIDDLEWARE CONFIGURATION >>> >>> >>> ########## URL CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#root-urlconf >>> ROOT_URLCONF = '%s.urls' % SITE_NAME >>> ########## END URL CONFIGURATION >>> >>> >>> ########## APP CONFIGURATION >>> DJANGO_APPS = ( >>> # Default Django apps: >>> 'django.contrib.auth', >>> 'django.contrib.contenttypes', >>> 'django.contrib.sessions', >>> 'django.contrib.sites', >>> 'django.contrib.messages', >>> 'django.contrib.staticfiles', >>> >>> # Useful template tags: >>> # 'django.contrib.humanize', >>> >>> # Admin panel and documentation: >>> 'django.contrib.admin', >>> # 'django.contrib.admindocs', >>> ) >>> >>> # Apps specific for this project go here. >>> LOCAL_APPS = ( >>> 'person', >>> 'registration', >>> 'utils', >>> ) >>> >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps >>> INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS >>> ########## END APP CONFIGURATION >>> >>> >>> ########## LOGGING CONFIGURATION >>> # See: https://docs.djangoproject.com/en/dev/ref/settings/#logging >>> # A sample logging configuration. The only tangible logging >>> # performed by this configuration is to send an email to >>> # the site admins on every HTTP 500 error when DEBUG=False. >>> # See http://docs.djangoproject.com/en/dev/topics/logging for >>> # more details on how to customize your logging configuration. >>> LOGGING = { >>> 'version': 1, >>> 'disable_existing_loggers': False, >>> 'filters': { >>> 'require_debug_false': { >>> '()': 'django.utils.log.RequireDebugFalse' >>> } >>> }, >>> 'handlers': { >>> 'mail_admins': { >>> 'level': 'ERROR', >>> 'filters': ['require_debug_false'], >>> 'class': 'django.utils.log.AdminEmailHandler' >>> } >>> }, >>> 'loggers': { >>> 'django.request': { >>> 'handlers': ['mail_admins'], >>> 'level': 'ERROR', >>> 'propagate': True, >>> }, >>> } >>> } >>> ########## END LOGGING CONFIGURATION >>> >>> >>> ########## WSGI CONFIGURATION >>> # See: >>> https://docs.djangoproject.com/en/dev/ref/settings/#wsgi-application >>> WSGI_APPLICATION = '%s.wsgi.application' % SITE_NAME >>> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "Django users" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/django-users/nSGkAEIrIMY/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at http://groups.google.com/group/django-users. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/django-users/d0639ad4-0403-40bc-b682-9121b625c451%40googlegroups.com >> >> <https://groups.google.com/d/msgid/django-users/d0639ad4-0403-40bc-b682-9121b625c451%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/47aeb1fb-bd6a-4808-823e-48cde6f864f9%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.

