我们允许用户将自己的自定义css / less上传到我们的django应用程序。
我们所有的css / less文件都由django_compressor“即时”压缩。
最初部署应用程序时,所有css文件都会移动到collect-static
目录。
当用户上传自定义css样式时,他们会替换collect-static
目录中较少的文件之一。
问题在于只有在重新加载apache时才会出现更改,因此django-compressor会生成一个新的css文件。
有没有办法强制django-compressor重新生成它的编译和缓存文件?在django应用程序级别触发sudo services apache2 reload
我感觉不舒服。
答案 0 :(得分:5)
我可以提出两种可能的解决方案,我不太喜欢它们。
您可以在doc或cron:
内拨打compress
(incron)
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)