【问题标题】:django-compressor + less compress the files but link to original filesdjango-compressor + less 压缩文件但链接到原始文件
【发布时间】:2012-11-20 10:38:16
【问题描述】:

我有一个 django-compressor 1.2 的 django 1.4.2 应用程序,用于压缩更少的文件。

我在 app/static/css/home.less 中有我的 less 文件。 它在static/CACHE/css/5208013a00a2.css

下输出一个less文件

在本地运行时(Debug=True,文件由 django 提供)我得到了正确的响应。我的 html(模板)文件中的以下输出:

<link rel="stylesheet" href="/static/CACHE/css/5208013a00a2.css" type="text/css">

在部署中运行时(Apache 提供文件)我的响应很糟糕。我的 html 文件中的以下输出:

<link type="text/less" rel="stylesheet" href="/adduplicator/static/css/home.less" charset="utf-8">

文件是在 static/CACHE/css/5208013a00a2.css 下的部署中创建的,所以我假设没有权限问题。我在日志中没有发现任何错误。

settings.py 中的一些设置:

COMPRESS_PRECOMPILERS = (
    ('text/coffeescript', 'coffee --compile --stdio'),
    ('text/less', 'lessc {infile} {outfile}'),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)

部署是通过fabric进行的,它在虚拟环境下创建应用程序。

【问题讨论】:

  • 我能想到的两件事:您的lessc 编译器在服务器上可用吗?其次,您的生产和开发设置之间是否存在差异?
  • 你说对了一部分。 lessc 不可用。通过: sudo apt-get install npm 安装它; sudo npm install less -g。但是,这仍然没有帮助。设置之间的区别是调试真和调试假。一个提供静态文件,另一个不提供
  • Apache 需要配置为提供静态文件。 Django 不会对 DEBUG=False 执行此操作,因为内置服务器对静态文件的性能不是很好。
  • @MichaelMior 不相关。与其他 js 一样,css 文件也很完美。它正在使用 mod_wsgi。
  • @GalBracha 啊,好吧。那就别管我的评论了:)

标签: django less django-compressor


【解决方案1】:

我相信

('text/less', 'lessc {infile} {outfile}'),

应该是

('text/less', 'lessc {infile} &gt; {outfile}'),

因为没有重定向,lessc 将编译为标准输出。

【讨论】:

    【解决方案2】:

    这可能适用于原始海报,也可能不适用,但我遇到了完全相同的错误(.less 文件被链接而不是被生成的 CSS 替换),这是因为我最近将 Django 设置为正常运行用户而不是 root,因此无权写入它以 root 身份创建的缓存文件夹。 chown -R myuser:mygroup static/cache 解决了这个问题。

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,我的设置与您的设置几乎相同(使用 apache、debug=False 等),但尚未解决。我发现如果我手动运行压缩(python manage.py compress),它会解决这个问题,但它只会暂时解决它。 6-12 小时后问题会再次出现。

      我正在压缩的 .css/.js 文件中没有任何动态 - 我使用 django 压缩器作为预编译我的 lessc 和 coffeescript 的一种方式。

      我希望您在去年秋天遇到此问题时找到了解决方法 - 对于遇到相同问题的其他人,请尝试手动运行 compress。我不知道为什么这会有所帮助,因为文件已经存在于缓存中,但出于某种原因(暂时)它确实如此。解决后我会更新。

      编辑:过去 12 天没有再次出现问题。我仍然有点草率地指出存在问题并且我不理解解决方案,但现在它正在工作,所以我专注于其他事情。如果您有这种性质的问题,请发表或评论。

      如果您遇到此问题,建议的步骤:

      1. 验证文件是否在 CACHE 目录中生成
      2. 查看文件的所有权和 CACHE 目录,并在必要时对其进行 chown
      3. 查看 CACHE 中文件的时间戳,验证它们是否合理
      4. 手动运行 collectstatic 并压缩,然后重新启动服务器(如果您使用的是 python runserver 或 sudo 服务,请终止并重新启动 apache2 restart 或其他等效项)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        相关资源
        最近更新 更多