4

ラックスペースに移動するdjangoアプリがあります。FileFields を使用するモデルがあり、django-storages ライブラリ s3/boto バックエンドを使用しています。ストレージにクラウドファイルを使用したいのですが、古い s3 コンテンツを提供できるようにする必要があります。

ファイルへのリンクを提供するテンプレート ページで、次のようにします。

href="{{ static_url }}{{ article.code_archive_file}}"

static_urlはビューから設定され、等しいですsettings.STATIC_URLsettings.STATIC_URLs3から切り替えると変更されるため、明らかにこれは機能しません。

すべての s3 ファイルを手作業で cloudfiles に移行するスクリプトを作成し、テーブル内のすべての FileField を調べて更新する必要がありますか? (うーん)。ストレージのバックエンドを変更して、古い素材を s3 バケットに残しておきたいと思います。

ファイルとフィールドを移行する必要がある場合、誰かがそのためのスクリプトを既に作成していますか?

おまけの質問: これを行う際に、従わなかったベスト プラクティスは何ですか? ジャンゴを使い始めてまだ半年ほどです。

4

1 に答える 1

0

オプション A: 古いストレージと新しいストレージで少し異なるパスを使用して、ファイルを提供する場所を決定することができます。何かがカスタムストレージクラスである可能性があると思います:CloudFilesStorageから継承されたストレージクラスを作成し、オーバーライドされたurlメソッドでsuperを呼び出すか(ファイルが新しいストレージにある場合)、S3BotoStorageからurlメソッドを呼び出します(ファイルが古いストレージにある場合)保管所)。

オプション B: ファイルを cloudfiles に移動できます。パスを同様に保つ場合、その後DBで実際に何かを変更する必要はないと思います。スクリプトは必要ないかもしれません。ファイルをダウンロードしてからアップロードするだけです (ダウンロードには s3cmd を使用できます。おそらく cloudfiles にはアップロード用のツールもあります)。

ベスト プラクティスについて: static_url と静的ストレージの代わりに、media_url と DEFAULT_FILE_STORAGE を使用する必要がありました。プロジェクトの静的ファイル (css/js/icons) とアップロードされたメディアを分けておくことをお勧めします。

于 2014-01-09T11:51:51.473 に答える