跳转到主要内容

用于在CDN上管理Pyramid静态文件的工具

项目描述

从CDN提供静态文件

内容分发网络(CDN)允许您更快地向用户提供服务静态文件。对于Web应用程序,主要优势是您的页面渲染速度更快,从而提供更好的用户体验。

此外,JavaScript或CSS文件等内容在放置到CDN之前应该“瘦身”。通过减小文件大小,您还可以进一步提高用户体验,使加载速度更快。

van.static为您提供了一项工具,您可以选择将其文件部署到CDN,而不会使开发过程更加复杂。

工作流程

此工具有助于使用静态文件和pyramid实现一个非常具体的工作流程

  • 在开发过程中,静态文件存储在子版本控制系统中,并在Pyramid应用程序中正常配置。

  • 在部署之前,系统管理员从egg中提取静态文件并将其上传到CDN。CDN上的URL根据提取文件所用的egg版本而有所不同。

  • 在提取过程中,CSS和JS文件可以可选地进行压缩。

  • 在生产中,系统管理员配置应用程序以使用CDN上的静态文件。

此工作流程具有以下优势

  • 对开发的影响最小。文件更改立即可见,开发者也使用未压缩的文件。

  • 由CDN提供的文件可以具有非常长的缓存控制时间,同时仍然允许它们在应用程序升级时几乎立即更新。

测试提取功能

您可以通过直接运行 cdn.py 文件来试用提取工具。以下命令将从 deform 包中提取 static 资源到 test_extract 目录:

$ mkdir test_extract $ python van/static/cdn.py –target “file://$(pwd)/test_extract” –resource deform:static

注意:deform 包必须位于 Python 路径上。

如果您使用类似这样的 URL s3://mybucket/path/to/files/,则提取的资源将直接放置在 Amazon S3 中。您需要手动安装 boto 以使用此功能。

在您的应用程序中实现

一种方法是在您的包中包含如下代码:

>>> def my_extract_filesystem_command():
...     """Customized extract command for my application"""
...     cdn.extract_cmd(['myapp:static', 'deform:static'], yui_compressor=True)
>>> from pyramid.config import Configurator
>>> def make_pyramid_app(cdn_url=None):
...     config = Configurator()
...     config.include('van.static.cdn')
...     config.add_cdn_view(cdn_url or 'myapp_static', 'myapp:static')
...     config.add_cdn_view(cdn_url or 'deform_static', 'deform:static')
...     return config.make_wsgi_app()

您会将 my_extract_filesystem_command 制作为一个系统管理员在部署时运行的命令行脚本。同样,cdn_url 配置选项由系统管理员设置为文件导出的 URL。

GZip 内容编码压缩

支持在提取期间对 S3 目标进行资源压缩。目前 S3 和 Cloudfront 不直接支持即时压缩,因此使用一种变通方法,上传多个资源副本。一个没有编码,其余的有编码。

然后根据浏览器的功能生成指向压缩或非压缩资源的链接。

以下是如何在 Pyramid 应用程序中修改资源生成的一个示例

>>> from pyramid.request import Request
>>> class ZippingPyramidRequest(Request):
...
...     def static_url(self, path, **kw):
...         if 'gzip' in self.accept_encoding:
...             package, path = path.split(':', 1)
...             path = '{package}:gzip/{path}'.format(
...                     package=package,
...                     path=path)
...         return Request.static_url(self, path, **kw)

提取器配置为使用带有 –encoding 参数的 gzip 编码上传资源。

警告:HTTP Vary 必须包含 Accept-Encoding 以与任何缓存良好地协作。

APT 集成

对于使用 APT 安装软件包的系统管理员,一个有用的技巧是将片段放入 /etc/apt/apt.conf.d/

DPkg::Post-Invoke::      "/path/to/extraction/script";

这样,当在应用程序服务器上安装软件包时,提取脚本就会运行。注意,如果您已安装 etckeeper,则应将其放在之后。

JSLint 测试支持

注意:要使用此功能,您必须在您的 PATH 中有一个 jslint 命令。

这允许您从 unittest 运行 jslint 命令,对目录中的所有文件进行测试。例如

>>> import unittest
>>> class TestJSLint(unittest.TestCase):
...
...     def test_static(self):
...         from van.static.testing import assert_jslint_dir
...         from pkg_resources import resource_filename, cleanup_resources
...         assert_jslint_dir(resource_filename('vanguardistas.publicview', 'static/js'))
...         cleanup_resources()

YUI3 载入器配置辅助工具

van.static.yui 包含简化从 JS 模块目录设置 YUI3 载入器配置的实用工具。

贡献

如果您感兴趣,主要开发仓库在 github 上 https://github.com/jinty/van.static

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分布

van.static-1.9.tar.gz (20.8 kB 查看哈希)

上传时间

支持