我一直在使用Django Compressor来管理我的咖啡/少文件,它非常适合开发,但是我有一些问题要让它适用于我的生产部署.
我的想法是让apache托管静态文件,可能在另一台服务器上.我设置COMPRESS_OFFLINE = True的settings.py文件.
然后我做以下事情
python manage.py compress- 这将填充CACHE我的目录中的static目录,其中将收集所有静态文件.python manage.py collectstatic- 这会将我项目中所有应用程序(其中一些不使用压缩程序)的静态文件收集到我的static目录中.static目录复制到apache托管的某个地方.并设置apache来提供文件.static_url变量settings.py以指向静态服务器.如果我打开任何页面,我在服务器上收到以下错误,这似乎只发生在我DEBUG = False和COMPRESS_OFFLINE = True我的settings.py文件上:
TemplateSyntaxError:夹缝OfflineGenerationError同时呈现:您已启用脱机压缩,但关键"777ba26736d046ab043dc151e7e9a060"从离线清单丢失.您可能需要运行"python manage.py compress".
当我检查static/CACHE目录时,我确认错误是什么,这是我的manifest.json文件:
{
"6189b8598993d1cbdbd35d4dfd1a6711": "<script type=\"text/javascript\" src=\"http://192.168.1.123/CACHE/js/2f6ca6616bd6.js\"></script>",
"5c66dbed0e5b766c6e32773cd8585f3c": "<link rel=\"stylesheet\" href=\"http://192.168.1.123/CACHE/css/154d95903951.css\" type=\"text/css\" />"
}
Run Code Online (Sandbox Code Playgroud)
如果我删除CACHE目录并重新运行python manage.py compress,我会在错误消息和清单文件上获得一组新ID,但清单上仍然缺少错误ID.
所以,我想这里有两个问题.为什么不起作用?实现这个目标的正确方法是什么?
谢谢.
我不确定我做得对,但问题在于:
django-compressor与lessc预处理COMPRESS_ENABLED是True,所有工作正常COMPRESS_ENABLED是False时,CssAbsoluteFilter不运行了,这意味着所有相关的图片网址相对保持,因此被打破(因为它们从相对不是CACHE目录)我可以想出一个"聪明"的目录结构,其中相对路径解析为同一个文件,无论它们来自CACHE目录还是来自LESS文件目录,但这似乎是一个脆弱的解决方法.
当谈到LESS +时,你通常如何工作django-compressor?
I want Django Compressor to work with Microsoft new language TypeScript.
I downloaded the compiler tsc and it works fine.
When trying to use it with Django Compressor this way:
COMPRESS_PRECOMPILERS = (
('text/less', 'lessc {infile} {outfile}'),
('text/typescript', 'tsc {infile} {outfile}'),
)
Run Code Online (Sandbox Code Playgroud)
and
{% compress js %}
<script type="text/typescript" charset="utf-8">
var x=3;
function greeter(person: string) {
return "Hello, " + person;
}
var user = "Jane User";
</script>
{% endcompress %}
Run Code Online (Sandbox Code Playgroud)
the output is an empty JS script tag …
我正在使用 django-compressor + LESS。
我@import在 .less 文件中的相对url(../image.png)和包含.less文件中的相对有问题。
我会解释。我有下一个文件夹结构:
common/ # Django app with some common stuff, e.g. common button styles
static/
common/
less/buttons.less
img/icon.png
blog/
static/
blog/
less/blog_buttons.less
Run Code Online (Sandbox Code Playgroud)
在里面buttons.less我有按钮的 mixin:
.button() {
color: white;
padding: 4px 10px;
background: gray url(../img/icon.png) no-repeat 0 0;
}
Run Code Online (Sandbox Code Playgroud)
在里面blog_buttons.less我使用这个mixin:
@import "../../../../common/static/common/less/buttons";
.blog_button {
.button;
background-color: orange;
}
Run Code Online (Sandbox Code Playgroud)
这是问题所在:
当 django-compress 预编译我的blog_buttons.less- 按钮背景指向/static/blog/img/icon.png(404 Not Found)。但它应该指向/static/common/img/icon.png
难道我做错了什么?(我觉得应该是一种很常见的情况)
我在让django压缩器与CloudFront一起工作时遇到了一些麻烦.我正在运行offline compress命令来生成我的压缩文件和manifest.json文件.在此之后,我运行collectstatic将压缩文件上传到我的S3存储桶.
然后从CloudFront提供这些静态文件,因此我的设置如下所示:
STATIC_ROOT = ''
STATIC_URL = 'http://<my-cloudfront-domain>/somebucket/'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
COMPRESS_OFFLINE = True
Run Code Online (Sandbox Code Playgroud)
问题是,CloudFront正在提供旧版本的manifest.json,这意味着压缩器正在抛出一个OfflineGenerationError.
即使有一个缓存后端,我担心如果缓存服务器出于某种原因离线/刷新我的清单文件将是不正确的.
我在这里遗漏了一些东西以确保我没有遇到OfflineGenerationError吗?
我刚刚将Django 1.4.2升级到1.5,我开始在django_compressor上出错.
You have offline compression enabled but key "eb225276268ea55d3b90c71df63109d9" is missing from offline manifest. You may need to run "python manage.py compress".
Run Code Online (Sandbox Code Playgroud)
此外,我更新了django_compressor到最后一个版本(实际1.2),仍然得到相同的错误.
当我尝试python manage.py compress时,我注意到:
c:\python27\lib\site-packages\django\utils\hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead DeprecationWarning)
Run Code Online (Sandbox Code Playgroud)
此通知是否与脱机压缩错误有关?
[更新] 我发现另一个有趣的事情......
在我遇到问题的模板中,我删除了所有应该压缩的css:
{% extends "base.html" %}
{% block head %}
{% load compress %}
{% compress css %}
{% endcompress %}
{% endblock %}
...
Run Code Online (Sandbox Code Playgroud)
我运行python管理:
python manage.py compress
python manage.py collectstatic --noinput
Run Code Online (Sandbox Code Playgroud)
没有错误.
但是......问题仍然存在.
You …Run Code Online (Sandbox Code Playgroud) 我在Django项目中组织了模板,使得网站上的每个页面都包含一个"公共"LESS文件,每个页面还可以指定另一个包含页面特定样式的LESS文件.
问题是我需要特定于页面的LESS文件才能引用"common"LESS文件中的变量.我认为,最简单的方法是将变量声明移动到LESS文件可以的单独文件中@import.
但是,Django应用程序使用单独的目录来存储其静态文件.最后,文件系统看起来像这样:
- common
- static
- css
- definitions.less
- common.less
- other
- static
- css
- other.less
双方common.less并other.less需要进口definitions.less.在这种情况下,common.less这很简单:
@import "definitions.less";
Run Code Online (Sandbox Code Playgroud)
以下是LESS文件实际包含在页面中的方式,以防有助于:
{% load compress %}
{% load static %}
{% compress css %}
<link href="{% static "css/common.less" %}"
rel="stylesheet" type="text/less">
{% endcompress %}
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法来确保两个LESS文件都可以使用公共变量定义?我想避免组合LESS文件有以下几个原因:
我正在尝试从amazon s3提供gzip文件.这是我的settings.py:
AWS_IS_GZIPPED = True
AWS_PRELOAD_METADATA = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'elasticbeanstalk-eu-west-1-2051565523'
STATIC_URL = 'https://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
COMPRESS_OFFLINE = True
COMPRESS_ENABLED = True
COMPRESS_URL = STATIC_URL
COMPRESS_CSS_FILTERS = [
'compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.CSSMinFilter'
]
COMPRESS_JS_FILTERS = [
'compressor.filters.jsmin.JSMinFilter',
]
COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
Run Code Online (Sandbox Code Playgroud)
当我这样做时,django为每个*.js和*.css压缩创建*.gz文件,但奇怪的是只有*.css文件作为gzip提供.我可以在aws s3上看到.css文件有Content-Encoding:gzip而*.js没有.这里发生了什么?
我们正在使用django-compressor和django.contrib.staticfiles应用程序,我们在运行django开发服务器和处理我们的SCSS时遇到问题:错误的SCSS文件被编译.这是该版本STATIC_ROOT/app也越来越发现,而不是版本的应用程序/静态的.这使得对SCSS的编辑app/static不会反映在编译的CSS中.
删除所有内容可以STATIC_ROOT/app解决问题,但如果collectstatic由于某种原因执行会导致很多混乱.
有没有办法确保编译app/static文件而不是任何现有的STATIC_ROOT/app文件?
我们在django 1.6中使用django-compressor 1.4,并在django设置文件中使用以下设置:
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
'compressor.finders.CompressorFinder',
)
COMPRESS_PRECOMPILERS = (
("text/x-scss", 'sass --scss'),
)
STATICFILES_DIRS = [] #default
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
Run Code Online (Sandbox Code Playgroud) Django 错误:
OfflineGenerationError at / 您启用了离线压缩,但离线清单中缺少键“e3efe8ea14c9eeeff843e0280b54e1d92c293a5018e6d4a0be93a65997d8e246”。您可能需要运行“python manage.py compress”。以下是原文内容:
然后它显示我的 CSS 文件内容。
{% load static %}
@font-face {
font-family: 'fontawesome';
src: url('{% static "global/fontawesome-5.0.13/fa-regular-400.woff2" %}') format('woff2'), url('{% static "global/fontawesome-5.0.13/fa-regular-400.woff" %}') format('woff');
}
@font-face {
font-family: 'NotoSans';
src: url(" {% static 'global/NotoSans-Regular.ttf' %}") format('truetype');
}
@font-face {
font-family: 'NotoSans';
src: url(" {% static 'global/NotoSans-BoldItalic.ttf' %}") format('truetype');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: 'NotoSans';
src: url(" {% static 'global/NotoSans-Italic.ttf' %}") format('truetype');
font-style: italic;
}
@font-face {
font-family: 'NotoSans';
src: url(" {% …Run Code Online (Sandbox Code Playgroud)