3

我们让用户将他们自己的自定义 css/less 上传到我们的 django 应用程序。

我们所有的 css/less 文件都由django_compressor “on-the-fly”压缩。

最初部署应用程序时,所有 css 文件都将移动到该collect-static目录。

当用户上传自定义 css 样式时,他们会替换collect-static目录中较少的文件之一。

问题在于这些更改仅在重新加载 apache 时才会出现,因此 django-compressor 会生成一个新的 css 文件。

有没有办法强制 django-compressor 重新生成它的编译和缓存文件?sudo services apache2 reload在 django 应用程序级别触发 a 时我会感到不舒服。

4

2 回答 2

5

我可以想出两个可能的解决方案,我不太喜欢这两个。

您可以从incron或 cron中调用compress( doc ):

python manage.py compress

或者你可以设置一个非常低的COMPRESS_REBUILD_TIMEOUT。(文档

顺便说一句,您将用户脚本作为单独的捆绑包,对吗?

于 2012-10-25T09:25:01.100 回答
2

我使用了不同的方法。我现在正在使用离线压缩,无论如何这对于多服务器部署来说更快更好。

我为用户提供了一个界面来更改某些 css 和更少的值。我将这些 css/less 值保存在数据库表中,以便用户可以轻松地编辑这些内容。

为了使新的 css/less 值可用于前端(编译的 css 文件),我将用户在 less 文件中输入的值写入磁盘并重新运行python manage.py compress命令。

这样会生成编译后的压缩器文件,如果用户输入了无效的 less 代码,这会导致编译错误,压缩器会停止并保留旧的 css 文件。

这是我的 save() 方法:

 def save(self, *args, **kwargs):

        #write the less file to the file system
        #everytime the model is saved
        try:

            file_location = os.path.join(settings.STATIC_ROOT, 'styles', 'less', 'custom_styles.less')

            with open(file_location, 'w') as f:
                f.write(render_to_string('custom_styles/custom_stylesheet_tmpl.txt', {'platform_customizations': self}))

        except IOError:
            #TODO show error message to user in admin backend and via messaging system
            raise IOError

        #re-run offline compress command in prod mode
        management.call_command('compress')


        super(PlatformCustomizations, self).save(*args, **kwargs)
于 2012-12-14T16:22:43.453 回答