Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Collectstatic error while deploying Django app to Heroku

I'm trying to deploy a Django app to Heroku, it starts to build, download and installs everything, but that's what I get when it comes to collecting static files

$ 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. 

This is the whole settings.py file

# 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' 

This is the structure of the project

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

Any thoughts?

like image 210
Stefano De Rosso Avatar asked Apr 16 '16 15:04

Stefano De Rosso


People also ask

How do I run Collectstatic in Django?

Using the collectstatic command, Django looks for all static files in your apps and collects them wherever you told it to, i.e. the STATIC_ROOT . In our case, we are telling Django that when we run python manage.py collectstatic , gather all static files into a folder called staticfiles in our project root directory.


1 Answers

I just updated to Django 1.10 today and had the exact same problem. Your static settings are identical to mine as well.

This worked for me, run the following commands:

  1. disable the collectstatic during a deploy

    heroku config:set DISABLE_COLLECTSTATIC=1

  2. deploy

    git push heroku master

  3. run migrations (django 1.10 added at least one)

    heroku run python manage.py migrate

  4. run collectstatic using bower

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

  5. enable collecstatic for future deploys

    heroku config:unset DISABLE_COLLECTSTATIC

  6. try it on your own (optional)

    heroku run python manage.py collectstatic

future deploys should work as normal from now on

like image 142
tomcounsell Avatar answered Sep 23 '22 12:09

tomcounsell