基本上,缓存清除文件上的哈希不会更新.
class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage):
pass
PIPELINE_JS = {
'main.js': {
'output_filename': 'js/main.min.js',
'source_filenames': [
'js/external/underscore.js',
'js/external/backbone-1.0.0.js',
'js/external/bootstrap-2.2.0.min.js',
]
}
}
Run Code Online (Sandbox Code Playgroud)
当我第一次运行该collectstatic命令时,它正确地创建了一个名为""的缓存清除文件main.min.d25bdd71759d.js
但是,当我运行该命令时,它无法在后处理阶段覆盖该缓存文件(并更新哈希).
它不断更新" main.min.js",这main.min.js与我的文件系统是最新的.但是,未创建新的缓存文件.即使底层main.min.js文件已更改,它也会保留相同的旧哈希.
当我手动删除AWS上的缓存文件时,我会从collectstatic详细程度设置为3的运行中收到以下消息:
Post-processed 'js/main.min.js' as 'js/main.min.d25bdd71759d.js
Run Code Online (Sandbox Code Playgroud)
settings.DEBUG 被设置为 False
为什么哈希不会更新?
我有一个新的virtualenv环境,并有最新的django-pipleline.
使用Closure的JS压缩工作非常完美,但由于节点错误,使用Yuglify的CSS压缩失败:
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.closure.ClosureCompressor'
PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'
Run Code Online (Sandbox Code Playgroud)
当我尝试收集静态时:
./manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
它说:
pipeline.compressors.CompressorError: /usr/bin/env: node: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但我已经明确安装yuglify,即使是全球:
sudo npm -g install yuglify
/usr/local/bin/yuglify -> /usr/local/lib/node_modules/yuglify/bin/yuglify
yuglify@0.1.2 /usr/local/lib/node_modules/yuglify
??? uglify-js@1.3.4
??? ycssmin@1.0.1
??? nopt@2.1.1
Run Code Online (Sandbox Code Playgroud)
尝试在设置中设置biney也无济于事:
PIPELINE_YUGLIFY_BINARY = '/usr/local/bin/yuglify'
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误.为什么现在这样的问题与npm?还有什么我需要另外设置的吗?
或者有没有办法用pip安装yuglify?
非常感谢,
我一直在尝试获取django-pipeline设置,以便我可以编译和连接我的资产.我还想从我的存储库中删除已编译的css文件,以避免拉取请求中的合并冲突.
我一直在尝试让django-pipeline编译文件作为部署过程的一部分,但无法解决这个问题.我用SASS写我的CSS.我的管道设置如下所示:
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_CSS = {
'main': {
'source_filenames': (
'sass/blah.scss',
'sass/main.scss',
),
'output_filename': 'css/main.css',
'extra_context': {
'media': 'screen',
},
},
}
PIPELINE_COMPILERS = (
'pipeline.compilers.sass.SASSCompiler',
)
Run Code Online (Sandbox Code Playgroud)
这在本地工作得很好,并在my/sass文件夹中生成.css文件,然后将它们组合起来制作main.css文件.如果我将这些CSS文件检查到我的git存储库并推送到Heroku,它也可以正常工作.但是,如果我忽略它们,我想这样做,我不提交编译文件,那么django-pipeline无法找到要合并的文件.我不知道如何在Heroku上运行sass编译,我找不到任何关于它的信息.
如果需要,我可以提供有关我的设置的更多信息,希望有人知道这件事!
我正在尝试使用django-pipeline来缩小静态资源,为它们使用缓存并使我的模板更简单.我的浏览器找到并加载了我的CSS和JS文件,但我的(非常简单的)主页加载大约需要10秒钟.

我使用的是Python 2.7.6,Django 1.7.3和django-pipeline 1.4.3.PyCharm使用本地virtualenv运行开发服务器.
我的settings.py包含以下内容:
DEBUG = True
TEMPLATE_DEBUG = DEBUG
INSTALLED_APPS = (
'django_admin_bootstrapped', # custom admin
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# pip installed apps
'pipeline',
# project apps
'myapp',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'pipeline.middleware.MinifyHTMLMiddleware',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.FileSystemFinder',
'pipeline.finders.CachedFileFinder',
'pipeline.finders.PipelineFinder',
)
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'myapp/static'),
)
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'
PIPELINE_JS_COMPRESSOR = …Run Code Online (Sandbox Code Playgroud) 我已配置django-pipeline压缩js和css.虽然js工作,但它无法找到css文件.
可以使用findstatic命令找到这些文件.我现在只用一个文件来测试它,它有一个css规则.这是我的配置
PIPELINE_CSS = {
'all_css': {
'source_filenames': (
'css/test.css'
)
},
'output_filename': 'css/main.css'
}
PIPELINE = True
PIPELINE_CSS_COMPRESSOR = None
Run Code Online (Sandbox Code Playgroud)
和错误信息 -
% ./manage.py collectstatic --traceback
You have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Copying '/Users/apoorvparijat/Documents/Work_Related/programming/my_projects/analytics_app/devel/stable/static/css/test.css'
Traceback (most recent call last):
File "/Users/apoorvparijat/.virtualenvs/stable/lib/python2.7/site-packages/django/core/management/base.py", line 222, …Run Code Online (Sandbox Code Playgroud) 根据django-pipeline文档,我已经添加'pipeline.middleware.MinifyHTMLMiddleware',到我的MIDDLEWARE_CLASSES来缩小html文件.但是,当我检查运行服务器时已经渲染的html时,它们并没有缩小.有人可以建议我是否遗漏了什么.
以下是我的MIDDLEWARE_CLASSES.我甚至尝试GZipMiddleware启用了类,但它仍然无法正常工作.我也试过使用两个DEBUG = False&DEBUG = True在settings.py但没有成功.
MIDDLEWARE_CLASSES = (
#'django.middleware.gzip.GZipMiddleware',
'pipeline.middleware.MinifyHTMLMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'Testapp.signin.views.SocialAuthExceptionMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
编辑:添加已安装的应用程序和静态文件存储设置.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
#'django.contrib.admin',
'social.apps.django_app.default',
# 'django.contrib.admindocs',
'Testapp',
'signin',
'pipeline',
)
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
Run Code Online (Sandbox Code Playgroud) 我有一个调用requireJavascript库的模块.我试图用Django-Pipeline压缩我的.js文件,但在collectstatic网页给出错误之后:
UncaughtReferenceError: require is not Defined
Run Code Online (Sandbox Code Playgroud)
如果我不使用Django-Pipeline来压缩文件,那么正常的测试/部署对于collect-static工作正常.在不破坏依赖性的情况下缩小我的.js文件的正确设置是什么 - 文档有点稀疏.django-pipeline是正确的选择吗?
编辑:我已经尝试确保首先在管道中压缩"必需"模型,但我似乎无法压缩require从中调用的模块而不返回错误.
我external/bower_components/正在我的项目根目录下安装bower组件.我有一些额外的静态文件static以及一些已安装的应用程序.我正在尝试使用django-pipeline来缩小所有生存的静态文件,bower_components而我只留下其他静态文件.
我的问题是我无法弄清楚如何使用django-pipeline缩小我的bower组件,同时不将所有bower包复制到目标目录.
在settings.py:
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
os.path.join(os.path.dirname(__file__), '..', 'external'),
)
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'
PIPELINE = True
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.PipelineFinder',
)
Run Code Online (Sandbox Code Playgroud)
当我跑步的时候python manage.py collectstatic,我最终得到了我想要的staticfiles东西(静态基础中的东西以及从凉亭中拉出来的东西的缩小版本),加上凉亭中每个包装的完整来源.这是从最终用户的角度来看,但是在那里我实际上并不需要很多过多的垃圾.
为了解决这个问题,我试过了python manage.py collectstatic -i bower_components.但在这种情况下,忽略不仅导致collectstatic不复制文件,而且还导致django-pipeline无法看到文件,并且最终
如果我尝试使用一些自定义管道查找器,pipeline.finders.FileSystemFinder它会导致collectstatic忽略我想要的所有静态脚本和CSS django.contrib.admin以及我的static/文件夹.
有没有办法我可以吃蛋糕并吃掉它,以便我可以获得collectstatic复制功能来关注一组,而django-pipeline的组合/缩小注意到另一组?
写完这篇文章之后,我意识到答案可能是明确地收集和缩小我安装的应用程序中的所有脚本和css PIPELINE_CSS,PIPELINE_JS但这似乎并不理想,因为每次集成新应用程序时都会产生不寻常的开销.
我正在尝试使用django-pipeline编译静态,但无法在dev模式下管理静态.由于我不是Django开发人员,我可能错误的是Django本身如何提供静态文件.这是我的项目结构:
因为我正在使用共享静态,所以我指定STATICFILES_DIRS了允许Django dev服务器和collectstatic命令查找共享静态的指令:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
Run Code Online (Sandbox Code Playgroud)
这是我的settings.py:
# for production, should be served via nginx
STATIC_ROOT= os.path.join(BASE_DIR, 'public/static/')
# prefix for static app
STATIC_URL = '/static/'
# also django-pipeline config
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.PipelineFinder',
)
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE = {
'PIPELINE_ENABLED': True,
'COMPILERS': ( …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用django-pipeline-1.1.27和s3boto来压缩和过滤静态文件,然后将它们上传到s3存储桶.如果我只是使用:
PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage'
Run Code Online (Sandbox Code Playgroud)
然后它工作,我得到一个静态文件夹,其中包含我配置的漂亮版本文件.我一切换到
PIPELINE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
Run Code Online (Sandbox Code Playgroud)
我明白了
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_manager(settings)
File "/my/virtual/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
utility.execute()
File "/my/virtual/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/my/virtual/env/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
self.execute(*args, **options.__dict__)
File "/my/virtual/env/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
output = self.handle(*args, **options)
File "/my/virtual/env/lib/python2.7/site-packages/pipeline/management/commands/synccompress.py", line 39, in handle
packager.pack_stylesheets(package, sync=sync, force=force)
File "/my/virtual/env/lib/python2.7/site-packages/pipeline/packager.py", line 52, in pack_stylesheets
**kwargs)
File "/my/virtual/env/lib/python2.7/site-packages/pipeline/packager.py", line 60, in pack
package['output'], package['paths'])
File "/my/virtual/env/lib/python2.7/site-packages/pipeline/versioning/__init__.py", line …Run Code Online (Sandbox Code Playgroud) django ×10
django-pipeline ×10
python ×3
bower ×1
caching ×1
css ×1
django-views ×1
heroku ×1
javascript ×1
npm ×1
sass ×1
yuglify ×1