pythondjangodjango-pipeline

Why django-pipeline does not collect static?


I've followed django-pipeline docs and I am having an issue when collecting static, the console shows that the specified file is not found.

collectstatic works without djanog-pipeline. I also tried to add static file at the same level as manage.py didn't make any difference...

Here's how my app tree is configured :

Globalapp : (root folder)
    - src (the base that contains all my django files)
        -- staticfiles (folder here after collectstatic)

        -- manage.py (file)

        -- app (folder, where settings.py is)
           ...
        -- pages (folder, where static files are)
           --- static
               - css
                 -- main.css
...

And here's how I configured my settings.py :

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = [
    ...
    'pipeline',
]

...

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
#tried : STATIC_ROOT = os.path.join(BASE_DIR, 'pages')

STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)

PIPELINE = {
    'COMPILERS': (
        'pipeline.compilers.stylus.StylusCompiler',
    ),
    'STYLESHEETS': {
        'pages': {
            'source_filenames': (
              'css/main.css',
            ),
            'output_filename': 'designer.css',
        },
    },
}

I am working in localhost for now, the error occures when I run python manage.py collectstatic, have I done something wrong ?


Here's the Traceback :

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python34\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "C:\Python34\lib\site-packages\django\core\management\__init__.py", line 355, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python34\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Python34\lib\site-packages\django\core\management\base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "C:\Python34\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 199, in handle
    collected = self.collect()
  File "C:\Python34\lib\site-packages\django\contrib\staticfiles\management\commands\collectstatic.py", line 139, in collect
    for original_path, processed_path, processed in processor:
  File "C:\Python34\lib\site-packages\pipeline\storage.py", line 26, in post_process
    packager.pack_stylesheets(package)
  File "C:\Python34\lib\site-packages\pipeline\packager.py", line 100, in pack_stylesheets
    variant=package.variant, **kwargs)
  File "C:\Python34\lib\site-packages\pipeline\packager.py", line 118, in pack
    content = compress(paths, **kwargs)
  File "C:\Python34\lib\site-packages\pipeline\compressors\__init__.py", line 78, in compress_css
    css = getattr(compressor(verbose=self.verbose), 'compress_css')(css)
  File "C:\Python34\lib\site-packages\pipeline\compressors\yuglify.py", line 20, in compress_css
    return self.compress_common(css, 'css', settings.YUGLIFY_CSS_ARGUMENTS)
  File "C:\Python34\lib\site-packages\pipeline\compressors\yuglify.py", line 14, in compress_common
    return self.execute_command(command, content)
  File "C:\Python34\lib\site-packages\pipeline\compressors\__init__.py", line 247, in execute_command
    stdin=subprocess.PIPE, stderr=subprocess.PIPE)
  File "C:\Python34\lib\subprocess.py", line 859, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1114, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The specified path to the file was not found.

Solution

  • I ended up using django-compressor and django-sass-processor. Which works like django-pipeline, I couldn't find the reason of this specific issue, but everything worked out with these other packages that does nearly the same thing as pipeline when combined.

    If you have trouble installing django-compressor wiith pip try with these commands :

    pip install rcssmin --install-option="--without-c-extensions"
    pip install rjsmin --install-option="--without-c-extensions"
    pip install django-compressor --upgrade