3

ユーザーが独自のカスタムcss/lessをdjangoアプリにアップロードできるようにします。

すべてのcss/lessファイルはdjango_compressorによって「オンザフライ」で圧縮されます。

アプリが最初にデプロイされると、すべてのcssファイルがcollect-staticディレクトリに移動されます。

ユーザーがカスタムcssスタイルをアップロードすると、collect-staticディレクトリ内の少ないファイルの1つが置き換えられます。

それに関する問題は、apacheがリロードされているときにのみ変更が表示されるため、新しいcssファイルがdjango-compressorによって生成されることです。

django-compressorにコンパイルおよびキャッシュされたファイルを再生成させる方法はありますか?sudo services apache2 reloaddjangoアプリケーションレベルでをトリガーするのは気が進まないでしょう。

4

2 に答える 2

5

私は2つの可能な解決策を思いつくことができます、私はそれらの両方があまり好きではありません。

incronまたはcron内からcompressdoc)を呼び出すことができます。

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 に答える