强制django_compressor重新编译css / less文件

时间:2012-10-24 10:11:31

标签: django apache apache2 django-compressor

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

我们所有的css / less文件都由django_compressor“即时”压缩。

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

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

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

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

2 个答案:

答案 0 :(得分:5)

我可以提出两种可能的解决方案,我不太喜欢它们。

您可以在doc或cron:

内拨打compressincron
python manage.py compress

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

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

答案 1 :(得分:2)

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

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

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

这样生成了编译后的压缩文件,如果用户输入了无效的代码,这会导致编译错误,压缩器会停止并保留旧的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)