【问题标题】:Django collectstatic not working with django-pipeline and yui-compressorDjango collectstatic 无法与 django-pipeline 和 yui-compressor 一起使用
【发布时间】:2012-08-24 11:30:48
【问题描述】:

我已经在 virtualenv 下的 Django 1.4.1 应用程序上安装了 django-pipeline,但是当我运行 python manage.py collectstatic 时,我得到:

Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_manager(settings)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/core/management/__init__.py", line 459, in execute_manager
    utility.execute()
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 163, in handle_noargs
    collected = self.collect()
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 119, in collect
    dry_run=self.dry_run)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/storage.py", line 30, in post_process
    packager.pack_stylesheets(package)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/packager.py", line 90, in pack_stylesheets
    variant=package.variant, **kwargs)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/packager.py", line 100, in pack
    content = compress(paths, **kwargs)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/compressors/__init__.py", line 76, in compress_css
    css = getattr(compressor(verbose=self.verbose), 'compress_css')(css)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/compressors/yui.py", line 14, in compress_css
    return self.compress_common(css, 'css', settings.PIPELINE_YUI_CSS_ARGUMENTS)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/compressors/yui.py", line 8, in compress_common
    return self.execute_command(command, content)
  File "/home/hg/VIRTUALENVS/movie/lib/python2.6/site-packages/pipeline/compressors/__init__.py", line 235, in execute_command
    pipe.stdin.write(smart_str(content))
IOError: [Errno 32] Broken pipe

我的设置是:

# static
STATIC_ROOT = join(REPOSITORY_ROOT, 'static_collected')
STATIC_URL = '/static/'
STATICFILES_DIRS = (join(REPOSITORY_ROOT, 'static'),)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

# pipeline (css/js compression)
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE = True
PIPELINE_CSS = {
    'base_style': {
        'source_filenames': (
            'css/style.css',
            'css/effects.css',
            'css/rs_style.css',
            'css/jq/jquery-ui-movieplayer.css',
        ),
        'output_filename': 'CACHE/css/style.css',
    },
}

PIPELINE_JS = {
    'base_scripts': {
        'source_filenames': (
          'js/jq/jquery.js',
          'js/mv.core.js',
          'js/toolbox/toolbox.core.js',
          'js/swfobject.js',
          'swf/jwplayer5.9.2156.js',
          'js/jq/jquery-ui.custom.min.js',
          'js/mongo_autocomplete.js',
          'js/rs_script.js',
        ),
        'output_filename': 'CACHE/js/scripts.js',
    }
}

在添加 django-pipeline 之前,管理命令运行良好,它找到了所有内容,因此与查找静态文件或目录权限无关。 Yuicompressor 是全局安装的,可以在/usr/local/bin/yuicompressor 下找到,所以我没有在我的设置中修改PIPELINE_YUI_BINARY

有什么线索吗? 谢谢!

【问题讨论】:

  • 这些文件是否为空?
  • 不,它们都包含至少一行代码。唯一的区别是其中一些已经缩小,而另一些则没有。
  • python manage.py findstatic css/style.css 会返回一些东西吗?
  • 是的,有两个文件:/static/css/style.css 中的源文件和/static_collected/css/style.css 中应压缩的实际文件(static_collectedSTATIC_ROOT)。

标签: django yui-compressor broken-pipe


【解决方案1】:
IOError: [Errno 32] Broken pipe

这个错误意味着yuicompressor 在我们有时间发送数据之前已经退出(大部分时间是因为它崩溃或因为它没有被发现)。检查您的yuicompressor 路径,并检查yuicompressor 是否真的有效。

【讨论】:

  • 好的,知道了!这是一个错误命名的问题.../usr/local/bin/yuicompressor 安装了“pip”只是一个调用 Yuicompressor jar 文件的 python 脚本,包不包含实际的 java 库。 jar 需要使用“apt”安装,它被称为yui-compressor...我讨厌他们使用几乎相同的名称来表示完全不同的东西:( 无论如何,现在可能 django-pipeline 应该可以工作,但我没有时间检查它,因为我已经切换到这个压缩器github.com/jezdez/django_compressorTnx 很多!
【解决方案2】:

在设置中添加可执行文件的路径,例如

PIPELINE_YUI_BINARY = '/usr/bin/yui-compressor'
PIPELINE_LESS_BINARY = '/usr/local/lib/node_modules/less/bin/lessc' 

路径可能不同(尤其是对于lessc,在本例中,less 是使用“npm install -g less”安装的)

【讨论】:

  • 我没有使用Less编译器,yui压缩器的路径和默认设置一样(我在问题中写过),所以不需要在设置中重新定义。 ..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2015-02-04
  • 2021-06-09
  • 2012-08-02
相关资源
最近更新 更多