Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Empty output with pipeline.finders #418

Open
bitcity opened this issue Feb 9, 2015 · 12 comments
Open

Empty output with pipeline.finders #418

bitcity opened this issue Feb 9, 2015 · 12 comments

Comments

@bitcity
Copy link

bitcity commented Feb 9, 2015

The setting below generates empty JS/CSS files in STATIC_ROOT

STATICFILES_FINDERS = ( 
    'pipeline.finders.FileSystemFinder',
    'pipeline.finders.AppDirectoriesFinder',
    'pipeline.finders.CachedFileFinder',
    'pipeline.finders.PipelineFinder',
)

The ones below work, but they also copy the source JS/CSS when I run collectstatic, which has to be manually removed. Is it a settings issue in my setup or is it a bug in django-pipeline?

STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)
@akszydelko
Copy link

I had the same problem, but I found this thread after some debugging and I found reason for that behaviour.

pipeline's finders are doing a good job but only when collectstatic is used. During which all files are ignored (not copied to STATIC_ROOT) and only files from compression process are saved there (to STATIC_ROOT). By this it works perfect no crap in static root only results of compression process. But...

In debug mode files are not compressed, but should be copied as they are to static root (compilation of less/sass is made later on those copied files). But because of the ignored list from finder classes, static files are not copied to static root for further usage, so FileSystemFinder can not find them.

This is the course of problems:
https://github.com/cyberdelia/django-pipeline/blob/master/pipeline/finders.py#L69-L117
https://github.com/cyberdelia/django-pipeline/blob/master/pipeline/glob.py#L29

Because of the above this for is never entered, and paths variable is never filled. The path variable is essential for ruther procedures to render script tags.
https://github.com/cyberdelia/django-pipeline/blob/master/pipeline/packager.py#L26-L28

So basicly I see two options

  1. Somehow use pipeline's finder only for collectstatic purpose.
  2. Exclude files from pipeline configuration to be ignored (but this will also copy them while using collectstatic and they will be useless because on production compressed files are used).

Unfortunately I don't have time right now for further digging or creating fixing pull request ;/, but I think my observations will help.

I am also thinking about inappropriate setting configuration as @addremove suggest, because file finders are able to find those files in static dir inside my apps, so I am not sure if we should blame django for that.

@akszydelko
Copy link

Right in time after I wrote previous comment it hit me...
The workaround solution is very simple.

On production use this:

STATICFILES_FINDERS = ( 
    'pipeline.finders.FileSystemFinder',
    'pipeline.finders.AppDirectoriesFinder',
    'pipeline.finders.CachedFileFinder',
    'pipeline.finders.PipelineFinder',
)

But for local development this:

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

But of course it would be nice to have it defined only once.

@bitcity
Copy link
Author

bitcity commented May 24, 2015

Probably related #398 & #378

@bitcity
Copy link
Author

bitcity commented May 26, 2015

Debugging further, I found 1.3.7 works correctly (with STATICFILES_FINDERS set to pipeline.finders.*). All the versions after that generate empty output files.

@qcaron
Copy link

qcaron commented Jul 29, 2015

So I changed the finders to the following in my development environment:

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

But because I manage front-end packages with Bower then I get a lot of directories and files in my static tree (for example, the src directory for Bootstrap is copied in the Django project STATIC_URL but not removed after compression tasks).

Please see #482 for more information about polluted STATIC_URL directory and slow page load.

If someone could answer to give advice or review the ticket that would be great. It seems there are only two of us having this problem or at least speaking about it.

@sam-dieck
Copy link

I have the same problem.... pipeline.finders.* generates empty files while django.contrib.staticfiles.finders.* do generate files correctly but also copies every file in the static dir.

@SverkerSbrg
Copy link

@samdieck look att #499 it broke things for me

@hheimbuerger
Copy link

I have that problem, too. Trying to wrap my head around the issue and looking for options.

In the meantime, isn't the first bug here that "invalid" paths in source_filenames do not yield an error message? Is there any reason to stay silent about such a critical error?

Then at least noticing this problem and troubleshooting it would already get a lot easier.

@MrCsabaToth
Copy link

+1

3 similar comments
@belugame
Copy link

+1

@mcanaves
Copy link

+1

@tehfink
Copy link

tehfink commented Mar 16, 2018

+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants