我在一个负载平衡器后面有两个服务器。每台服务器都运行一个memcached服务器,并且设置文件(在两台服务器上是相同的)都定义了它们(简而言之:共享缓存)。在
我希望服务器上生成的文件的路径是相同的,这样客户机就不必多次下载。在
为了让这个工作,我需要了解django压缩机是如何工作的。在
一个比this更详细、构造更好的序列将非常有用。在
编辑
COMPRESS_CACHE_KEY_FUNCTION = 'compressor.cache.socket_cachekey'
(请参见develop branch),还是使用相同的缓存键会导致我的文件名相同?在
在develope分支中有一个新的选项来更改css哈希方法。 https://github.com/jezdez/django_compressor
见line 61 in filters/css_default.py
我使用的设置:
对于js文件没有这样的选项,因为它们的哈希键永远不会使用mtime生成。在
这在我的负载平衡器后面工作得很好。在
编写此代码时,以下是开发分支中的最新提交:https://github.com/jezdez/django_compressor/commit/d48bc5f45d5a55b0f826eb605ccf09a6bf33fcb9
如果要有相同的缓存文件,则必须确保在两台服务器上都有相同的输入。在
您应该检查:
{% compress %}...{% endcompress %}
中的代码在两台服务器上是相同的(如果同时部署到两台服务器,则应该是相同的)如果所有这些要求都得到满足,生成的文件应该是相同的(内容和名称)。在
您可以使用“stat”unix命令检查mtime。在
您问题的答案:
编辑:
我在我的一个网站上查过负载均衡器。对于.css文件,我有不同的文件名,但是对于.js,它们是相同的。在
对于.css文件,我使用预处理器(http://lesscss.org/),所以它会影响mtime。在
编辑(主题开发后):
缓存中有什么?
由于documentationdjango compressor在缓存中存储了两个不同的内容:
完整生成代码,即:
<;link rel=“stylesheet”href=“http://cdn.inprl.pl/CACHE/css/117f97d818b8.css“type=”text/css“>;
由于以下缓存使用情况,django压缩器将对文件系统的读取次数减少到0。这对于页面速度至关重要,因为从内存读取比从文件系统读取快数百倍。而且文件系统常常是瓶颈。在
如何将其存储在缓存中?
django compress使用生成的密钥在缓存中存储代码。密钥生成自:
{% compress %}...{% endcompress %}
中的代码{% compress %}...{% endcompress %}
中提到的文件的mtime因此,如果您想获得一致的响应,那么所有服务器上的响应必须相同。在
附言。
请检查您的服务器上的约束(如mtime),如果它们匹配,请在此处发布信息。在
我将在我的网站上修复同样的问题可能下个星期,我会张贴更多的细节。在
您应该做的是将所有压缩文件放在负载平衡器后面的计算实例之外的存储器中。例如,使用amazons3将所有文件存储在应用程序的其他子域中。在
因此,
http://myapp.com
指向的是负载平衡器,http://s3.myapp.com
指向的是存储,比如amazons3。您不必担心在不同的实例上存储多个不同的版本。在在这里您可以找到一个带有Django的complete guide of how to setup Amazon S3, Gzip Compression and django-compressor。在
相关问题 更多 >
编程相关推荐