标签: django-compressor

Django压缩错误:输入类型无效:'CacheKey'

在压缩生产服务器上的django静态文件时,我们突然开始遇到此问题.Ubuntu 16.04,Python 3.x,Django 1.11.我正在使用ansible-playbook进行部署.

错误如下:

CommandError: An error occurred during rendering /chalktalk/app/chalktalk-react-40/chalktalk-react-40/chalktalk/apps/exams/templates/exams/section-edit.html: Invalid input of type: 'CacheKey'. Convert to a byte, string or number first.

它似乎不是一个静态文件中的问题,而是一个普遍的问题.每次运行它时,我们都会得到一个不同的文件.

我正在寻找谷歌上的任何线索,并没有出现相同的错误.

python django django-compressor ansible

10
推荐指数
1
解决办法
1962
查看次数

我的LESS @import路径应该是什么?

这是场景:

我正在运行Django 1.3.1,使用静态文件和django-compressor(最新稳定版)来编译LESS文件.

我有一个"资产"目录,它挂在静态文件中STATICFILES_DIRS(对于项目范围的静态资源).在那个目录中,我有一个"css"目录,其中包含一个包含LESS变量和mixins的"lib.less"文件.

所以物理路径是<project_root>/assets/css/lib.less,它服务于/static/css/lib.less.

在我的一个应用程序的静态目录中,我有另一个LESS文件,需要导入上面的那个.它的物理路径是<project_root>/myapp/static/myapp/css/file.less,它将服务于/static/myapp/css/file.less.

我的第一个想法是:

@import "../../css/lib.less"
Run Code Online (Sandbox Code Playgroud)

(即,基于URL,从上升到水平/static/myapp/css/static/,然后遍历下入/static/css/lib.less).

但是,这不起作用,我已经尝试了几乎我能想到的URL和物理路径的所有组合,并且所有这些组合都FilterError在模板中给我,因为无法找到要导入的文件.

任何人都有任何想法,实际的导入路径应该是什么?

django less django-compressor

9
推荐指数
2
解决办法
5892
查看次数

Django压缩器不重新生成压缩的CSS

我在一块css文件的开发中尝试使用Django Compressor.我首先将{%compress%}标签放在一个文件周围,生成f6527e81a37c.css.然后我在标签之间添加了两个css文件,但是没有一个缩小的文件,这导致了2个缩小的文件:f6527e81a37c.css和ee906624f953.css.

最后,我想将所有css块连接并压缩成一个缩小的文件,但是将更多文件移动到压缩标签中似乎不会重新生成与css文件关联的密钥,即它仍然压缩成多个css文件即使它们被包裹在相同的{%compress%}块中.

我尝试清除Django的memcache,删除Compressor生成的/ static/CACHE /目录,并使用Django Compressor附带的压缩管理命令,但是当我运行dev环境时,我仍然得到多个压缩的css文件.我可以做一些刷新,以便Django Compressor重新生成与{%compress%}块中的文件相关联的css密钥吗?Compressor必须存储先前压缩文件密钥的位置.

压缩的结果:

<link rel="stylesheet" href="/static/CACHE/css/f6527e81a37c.css" type="text/css" media="screen, projection" />
<link rel="stylesheet" href="/static/CACHE/css/ee906624f953.css" type="text/css" />
<link rel="stylesheet" href="/static/CACHE/css/7147db857125.css" type="text/css" media="screen, projection" />
<link rel="stylesheet" href="/static/CACHE/css/043e7d82b775.css" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

settings.py:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    #other
    'compressor.finders.CompressorFinder',
)
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
COMPRESS_CSS_FILTERS = [
    #creates absolute urls from relative ones
    'compressor.filters.css_default.CssAbsoluteFilter',
    #css minimizer
    'compressor.filters.cssmin.CSSMinFilter'
]
COMPRESS_JS_FILTERS = [
    'compressor.filters.jsmin.JSMinFilter'
]
Run Code Online (Sandbox Code Playgroud)

css django minify django-compressor

9
推荐指数
2
解决办法
6112
查看次数

django-compressor,heroku,s3:请求已过期

我在heroku上使用django-compressor和amazon s3提供静态文件,并且我一直遇到以下错误,压缩器生成了静态文件的链接.我对压缩机和s3完全不熟悉:

https://xxx.s3.amazonaws.com/static/CACHE/css/989a3bfc8147.css?Signature=tBJBLUAWoA2xjGlFOIu8r3SPI5k%3D&Expires=1365267213&AWSAccessKeyId=AKIAJCWU6JPFNTTJ77IQ

<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<RequestId>FE4625EF498A9588</RequestId>
<Expires>2013-04-06T16:53:33Z</Expires>
<HostId>Fbjlk4eigroefpAsW0a533NOHgfQBG+WFRTJ392v2k2/zuG8RraifYIppLyTueFu</HostId>
<ServerTime>2013-04-06T17:04:41Z</ServerTime>
</Error>
Run Code Online (Sandbox Code Playgroud)

我配置了两个heroku服务器,一个用于暂存,一个用于生产.他们每个人都有自己的数据库和s3桶.它们还共享相同的设置文件,所有唯一设置都配置为环境变量.我已经检查过静态文件实际上被推送到各自的存储桶.

压缩机和s3设置如下:

COMPRESS_ENABLED = True
COMPRESS_STORAGE = STATICFILES_STORAGE 
COMPRESS_URL = STATIC_URL
COMPRESS_ROOT = STATIC_ROOT
COMPRESS_OFFLINE = False

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
Run Code Online (Sandbox Code Playgroud)

每次我在升级或生产时将更新推送到heroku时,我最终遇到了上述问题.有时它发生在一小时后,有时一天,有时一周,有时一旦更新被推出.奇怪的是,如果我将相同的更新推送到两个环境,一个将工作,我将在另一个上得到错误,或者它们将首先工作,一个将在一小时后到期,另一个将在一周内到期.

如果有人能解释发生了什么,我真的很感激.显然,Expires参数会导致问题,但为什么持续时间会随着每次推送而变化,以及什么决定了时间量?你如何改变过期时间?如果您需要更多信息,请与我们联系.

更新:我通过设置AWS_QUERYSTRING_AUTH = False暂时解决了这个问题.似乎没有任何方法可以在查询字符串中设置EXPIRATION TIME,仅在请求标头中使用.

django heroku amazon-s3 django-compressor

9
推荐指数
1
解决办法
1918
查看次数

Django UncompressableFileError

我正在使用Amazon S3存储桶来存储我的静态文件.我在Django中有压缩器应用程序来压缩所有静态文件.Django给了我错误:

'home_page/css/bootstrap.min.css'无法通过COMPRESS_URL(' https://alphagravel.s3.amazonaws.com/static/ ')访问,无法压缩

同样你可以在这里查看:http://52.5.32.9/

但是:URL - ' https://alphagravel.s3.amazonaws.com/static/home_page/css/bootstrap.min.css '是可访问的

这是我的setting.py快照"""

INSTALLED_APPS = (
    ...
    'storages',
    'compressor',
    '...
)
AWS_ACCESS_KEY_ID = '****'
AWS_SECRET_ACCESS_KEY = '***********'
AWS_QUERYSTRING_AUTH = False

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_STORAGE_BUCKET_NAME = 'alphagravel'
AWS_PRELOAD_METADATA = True

STATIC_URL = 'https://alphagravel.s3.amazonaws.com/static/'
ADMIN_MEDIA_PREFIX = 'https://s3-us-west-2.amazonaws.com/alphagravel/admin/'

COMPRESS_ROOT = STATIC_URL
COMPRESS_URL = STATIC_URL
COMPRESS_STORAGE = STATICFILES_STORAGE
COMPRESS_ENABLED = True
COMPRESS_OFFLINE_MANIFEST = "manifest.json" # Is created in CACHE directory
COMPRESS_PARSER = 'compressor.parser.HtmlParser'
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么压缩器URL无法找到静态文件进行压缩.以及如何解决错误. …

python django amazon-s3 django-compressor

9
推荐指数
1
解决办法
1936
查看次数

在apache + mod_wsgi下运行subprocess.Popen总是返回一个错误,返回码为-6

我希望有人看到这个 -

我正在运行django-compressor,利用lessc设置来渲染/压缩文件中的CSS.它从开发服务器调用时效果很好,但是当在apache + mod_wsgi下运行时,它始终返回错误.

为了调试这个,我运行了过滤器调用的确切命令作为www-data用户(在WSGIDaemonProcess指令中被定义为wsgi用户)并验证它是否正常工作,包括读取和写入文件的权限它正在操纵.

我还攻击了该系统上压缩器/ filters/base.py中的django压缩器代码,似乎尝试调用的任何命令在proc.communicate()调用后得到的返回码为-6.

我希望有人之前看过这个 - 或者说它响了一些铃声.它在apache + mod_wsgi进程之外的这台机器上运行正常(即作为开发服务器运行进程).我只是不清楚可能阻塞subprocess.Popen()调用的内容.

python apache django mod-wsgi django-compressor

8
推荐指数
1
解决办法
2194
查看次数

使用Django Compressor分离静态文件和资产以及使用collectstatic

我很难理解django-compressor的使用.

这是我想要完成的事情:

静态文件和资产的分离(LESS,Coffeescript)

我想将我的LESS CSS和Coffeescript文件分成资产目录

例如

    app
    ??? assets
        ??? coffee
        ?   ??? script.coffee
        ??? less
            ??? style.less
Run Code Online (Sandbox Code Playgroud)

将静态资产(如图像)保留在静态目录中

例如

    app
    ??? static
        ??? hello.txt
        ??? photo.jpg
Run Code Online (Sandbox Code Playgroud)

为此,我已将资源路径添加到我的STATICFILES_DIRS变量,以允许django-compressor查找文件(按预期工作).这是正确的方法吗?我一直试图找到一个专用于django-compressor的独立加载路径,但没有任何运气,因为我不打算将这些资产用作静态.

用于生产部署的文件集合

为了部署到生产,我希望将编译好的CSS和JS文件以及我的app/static目录中的其他媒体(例如图像等)收集到app/static-prod目录中.但这并不是很好,因为在使用collectstatic命令时也会收集资产.

例如

(django-cpython)fots@fotsies-ubprecise-01:~/django_learning$ ./manage.py collectstatic --noinput
Copying '/home/fots/django_learning/app/assets/less/style.less'
Copying '/home/fots/django_learning/app/assets/less/import.less'
Copying '/home/fots/django_learning/app/assets/coffee/script.coffee'
Copying '/home/fots/django_learning/app/static/photo.jpg'
Copying '/home/fots/django_learning/app/static/hello.txt'

5 static files copied.
Run Code Online (Sandbox Code Playgroud)

使用该./manage.py compress命令只需要记录我编译的文件,而不是本例中的photo.jpg或hello.txt.

我发现这样做的唯一可行方法是使用带有collectstatic的--ignore标志

例如

(django-cpython)fots@fotsies-ubprecise-01:~/django_learning$ ./manage.py collectstatic --noinput --ignore=less --ignore=coffee
Copying '/home/fots/django_learning/app/static/photo.jpg'
Copying '/home/fots/django_learning/app/static/hello.txt'

2 static files copied.
Run Code Online (Sandbox Code Playgroud)

我也搞乱了COMPRESS_ROOTCOMPRESS_URL配置变量,但这些只会造成进一步的麻烦.更改COMPRESS_ROOT可解决collectstatic问题,但现在使用compress命令时,生成的文件最终位于静态文件的不同位置.

这些解决方案似乎并不优雅 有一个更好的方法吗?我觉得我错过了什么.

在此先感谢任何帮助:)

django django-compressor

8
推荐指数
1
解决办法
1653
查看次数

django-compressor:具有相对于文件夹的路径的CSS图像

我使用django-compresor作为部署在heroku上的应用程序,亚马逊S3提供静态文件.一切都工作正常,除了我在背景图像中引用的css中的图像:url()没有使用正确的路径呈现.

我的静态文件按以下目录结构组织:

-static
    -myapp
        -js
        -css
        -img
    -bootstrap
        -js
        -css
        -img
    -othervendor
        -js
        -css
        -img
Run Code Online (Sandbox Code Playgroud)

因此,我在url()中使用的路径是相对于css文件的:

url("../img/icon.png")
Run Code Online (Sandbox Code Playgroud)

我的所有css文件都被压缩并移动到我的静态目录中的CACHE文件夹中,并且CACHE目录的url正确呈现为:

https://mybucket.s3.amazonaws.com/static/CACHE/css/somehash.css
Run Code Online (Sandbox Code Playgroud)

问题是css文件url()中的图像呈现为:

https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
Run Code Online (Sandbox Code Playgroud)

它应该是:

https://mybucket.s3.amazonaws.com/static/myapp/img/imagefile.png
Run Code Online (Sandbox Code Playgroud)

或者如果图像被复制到CACHE目录,这将起作用:

https://mybucket.s3.amazonaws.com/static/CACHE/img/imagefile.png
Run Code Online (Sandbox Code Playgroud)

我的临时修复是将我的CSS中的图像路径更改为以下内容并且它有效:

url("/static/foldername/img/icon.png")
Run Code Online (Sandbox Code Playgroud)

我是django和压缩机的新手,所以我不确定应该是什么样的正确行为,但这似乎不正确.我看到它的方式,问题可以是固定的,如果我能得到的Django压缩机做两件事情:1)复制)在CSS的url(引用的所有图像到CASHE/IMG目录或2)使所代表的正确网址../这是我的设置:

我的模板中的css文件位于{%compress css%}块中.

s3utils.py(用于在我的存储桶中创建单独的媒体和静态目录)

from storages.backends.s3boto import S3BotoStorage

StaticS3BotoStorage = lambda: S3BotoStorage(location='static')
StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaS3BotoStorage = lambda: S3BotoStorage(location='media')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')
Run Code Online (Sandbox Code Playgroud)

settings.py

DEFAULT_FILE_STORAGE = 'myapp.settings.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'myapp.settings.s3utils.StaticRootS3BotoStorage'

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')

S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
MEDIA_URL = S3_URL+'media/'
MEDIA_ROOT = S3_URL+'media/'
STATIC_URL = …
Run Code Online (Sandbox Code Playgroud)

django-compressor

8
推荐指数
1
解决办法
2462
查看次数

除了一个之外,我可以在所有压缩块上使用过滤器吗?

在我的压缩器设置中,我在大多数javascript中使用SlimIt:

COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.SlimItFilter', ]

我的一些js文件不应该通过SlimIt,因为文件已经缩小,或者当javascript与其他文件缩小时会抛出一些错误.我的模板块最终看起来像这样:

{# code that I minify #}
{% block compressed_libs %}
    {% compress js %}
        <script src="/static/js/compress_this.js"></script>
        <script src="/static/js/also_compress_this.js"></script>
        ...
    {% endcompress %}
{% endblock %}

{# code that shouldn't minify #}
{% block non-compressible_libs %}
    <script src="/static/js/already.min.js"></script>
    <script src="/static/js/breaks-everything.js"></script>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

我可以为不同的块/文件设置不同的压缩过滤器规则,以便在跳过SlimIt时我的"不可压缩"文件仍然可以通过压缩器连接在一起吗?

django-compressor

8
推荐指数
1
解决办法
214
查看次数

Django没有名为"压缩器"的模块

我正在尝试使用cmd创建一个超级用户,但每次我运行命令时我都会:

C:\Users\PCDOM\Desktop\Power\pm_app>python manage.py syncdb
Traceback (most recent call last):
  File "manage.py", line 17, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
338, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
312, in execute
    django.setup()
  File "C:\Python27\lib\site-packages\django\__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Python27\lib\site-packages\django\apps\registry.py", line 85, in popu
late
    app_config = AppConfig.create(entry)
  File "C:\Python27\lib\site-packages\django\apps\config.py", line 86, in create

    module = import_module(entry)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named compressor
Run Code Online (Sandbox Code Playgroud)

即使我在我的虚拟环境和settings.py中安装了它:

在此输入图像描述

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #'bootstrap3',
    'promo', …
Run Code Online (Sandbox Code Playgroud)

python django django-compressor visual-studio-2015

8
推荐指数
2
解决办法
9806
查看次数