問題タブ [django-storage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - South の DataMigration を使用して、Django モデルの ImageField インスタンスのストレージ バックエンドを変更するにはどうすればよいですか?
一部のモデルの ImageFields を からS3BotoStorage
ストレージ バックエンドを使用するように移行しようとしていdjango-storages
ます。このプロセスの一環として、モデルの ImageField 宣言をstorage=instance_of_s3botostorage
引数を含むように変更し、イメージを ImageField 属性に保存するモデルの新しいインスタンスが、意図したとおりに S3 に保存されるようになりました。
私は既存のモデル インスタンスを S3 にデータを保存するように移動しようとしたので、South DataMigration を次のように記述しました。
storage
しかし、画像ファイルは単に古いバックエンドを使用して保存されるため、これは明らかに意図した効果をもたらしませんFieldFile
。FileField
では、モデルのインスタンスでファイル ストレージを移動/変更する方法は?
python - カスタム Django ストレージ
人々が自分の画像をアップロードできる Web ページがあり、販売可能なストレージに保存したいと考えています。Amazon S3 を使用するつもりでしたが、後で、静的コンテンツ (画像) を提供するための Web サーバーを備えた独自のファイル サーバーを使用することにしました。
しかし、これを行う方法がわかりません。それを行う正しい方法と、どのカスタム Django ストレージを使用する必要がありますか? これらのファイル サーバーに画像をアップロードするにはどうすればよいですか?
django - django-storagesを使用してcsvドキュメントを解析するときに、「引用符で囲まれていないフィールドに表示される改行文字」を取得する
django-storagesを使用してAmazonS3にアップロードされたcsvファイルを解析しようとしています。「エラー:引用符で囲まれていないフィールドに改行文字が表示されます-ファイルをユニバーサル改行モードで開く必要がありますか?」というメッセージが表示され続けます。これに対する通常の回避策は、「rU」でファイルを開くことですが、それはdjangoストレージでは機能しないようです。ファイルをサーバーに直接ドロップしてそこから開くと、ファイルが機能するので、可能であればファイルをサーバーに直接保存しないようにします。これが私が使用しているコードです:
django - djangoのs3に画像とサムネイルを保存する
django-storages、boto、および sorl-thumbnail を使用して、画像をサムネイル化し、s3 に保存しようとしています。動作していますが、小さな画像でも非常に遅いです。フォームを保存してs3に画像をアップロードするときは遅くても構わないのですが、その後は早く画像を表示してほしいです。
この SO の質問に対する回答では、サムネイルは最初のアクセスまで作成されませんが、get_thumbnail() を使用して事前に作成できることが説明されています。
Django + S3 (boto) + Sorl Thumbnail: 最適化の提案
私はそれをやっていますが、画像が表示されるときではなく、画像をアップロードするときに、thumbnail_kvstore テーブルへのすべてのエントリが作成されるようです。
問題は、画像を表示するページがまだ非常に遅いことです。デバッグ ツールバーのログ パネルを見ると、s3 との通信がまだたくさんあるようです。画像とサムネイルがアップロードされてキャッシュされた後、s3 と通信せずにページがすばやくレンダリングされるようです。
私は何を間違っていますか?ありがとう!
更新:弱いハックでうまくいったようですが、これを適切に行う方法を知りたいです:
https://github.com/asciitaxi/sorl-thumbnail/commit/545cce3f5e719a91dd9cc21d78bb973b2211bbbf
更新: @sorl の詳細情報
私は2つのビューで作業しています:
ADD VIEW: このビューでは、フォームを送信して、画像を含むモデルを作成します。画像はs3にアップロードされます。post_save シグナルでは、get_thumbnail() を呼び出して、必要になる前にサムネイルを生成します。
表示ビュー: このビューでは、追加ビューで生成されたサムネイルを表示します。
パッチなし:
ビューの追加: kvstore テーブルに 3 つのエントリを作成し、キャッシュに 10 回アクセス (6 セット、4 取得)、デバッグ ツールバーのログ タブに「HTTP 接続を確立しています」と 12 回表示
表示ビュー: kvstore テーブルにはまだ 3 つのエントリしかなく、キャッシュから取得したのは 1 つだけですが、デバッグ ツールバーには「HTTP 接続を確立しています」と 3 回表示されます。
122行目の変更のみ:
ADD VIEW: 上記と同じですが、ログに「HTTP 接続の確立」のみが 2 回表示されます DISPLAY VIEW: 上記と同じですが、ログに「HTTP 接続の確立」と 1 回のみ表示されます
また、118 行目に変更を追加します。
ADD VIEW: 上記と同じですが、「HTTP 接続を確立しています」というメッセージが 2 つになりました DISPLAY VIEW: 上記と同じで、ログ メッセージはまったくありません
更新: storage._setup() が 2 回呼び出され、storage.url() が 1 回呼び出されたようです。タイミングに基づいて、それぞれが s3 に接続していると思います。
これは、「HTTP 接続を確立しています」と 3 回表示される boto ロギングに反映されているようです。
django - django:解凍したファイルをローカルディスクに登録する
【質問が長くなってしまいましたことをお詫び申し上げます。】
私は Debian スクイーズで Django 1.2.3-3+squeeze1 を使用しています。
zip ファイルをディスクの一時的な場所にアップロードして解凍し、結果を永続的な場所に保存するアプリケーションを作成しています。FileUpload
解凍されたファイルは、解凍後に呼び出されるクラスとしてデータベースに登録されます
。アップロードされた圧縮ファイルもクラスに対応していますが、この質問では無視します。FileUpload
このように見えます。
で定義されたフォームも使用しています
ディスク上の解凍されたファイルを取得する関数。それらをデータベースに登録し、 と呼ばれる正しい場所に移動します
addFile
。以前はこれを使用していました:
これは機能しましたが、問題はファイル全体をメモリにダンプすることでした。大きなファイルの場合、特に Python がメモリの経済性で知られていないことを考えると、これは大量のメモリを消費していました。だから私はこれに切り替えました:
UploadedFile
( に) 既に存在していた派生クラスはどれも、
django/core/files/uploadedfile.py
私が望んでいたことをしていないように見えたので、私は をサブクラス化することを余儀なくされました。
Django File Uploads docsが言うので、temporary_file_path
関数はそこにあります
UploadedFile.temporary_file_path()
ディスクにアップロードされたファイルのみがこのメソッドを持ちます。アップロードされた一時ファイルへのフル パスを返します。
後述するように、FileSystemStorage
クラスは関数内でこの属性を探して
いるようです。_save
n
が zip アーカイブ内のファイルの相対パスである場合、使用法は
これは機能しますが、コードをトレースしたところ、コードがストリーミングを使用していることがわかりました。この場合、ファイルを一時的な場所から永続的な場所にコピーすることが明らかに最適です。問題のコードは
、クラスdjango/core/files/storage.py
の_save
関数にあり
ます。FileSystemStorage
で_save
、name
は宛先の相対パスで、content
はFile
オブジェクトです。
関数は_save
属性 を探しています
temporary_file_path
。このコードは、 でtemporary_file_path
前述した関数
によってトリガーされることを意図していると思いますdjango/core/files/uploadedfile.py
。ただし、実際に渡される (content
引数に対応する) クラスはであり、このオブジェクト<class
'django.db.models.fields.files.FieldFile'>
の属性 dict ( ) は次のようになります。content.__dict__
は、データ メンバー内にあるクラスにtemporary_file_path
アタッチされ
ます。その
ため、それ自体ではなく、属性があり
ます。UnzippedFile
_file
content._file
temporary_file_path
content
これは、通常のファイルのアップロードがどのように見えるかです。ご覧のとおり、似ています。
FileUploadForm
save
コードがからStorage
オブジェクトに到達する方法を詳細に追跡することは困難です。特に Django フォームのコードはかなりあいまいです。
とにかく、私の質問は、このすべてのセットアップの後、以下の最初のオプションがどのように/いつfile_move_safe
アクティブになるはずですか? ここにミスマッチが見られます。これはバグですか?誰でも明確にできますか?
python - Django-Storages S3 でデフォルトのファイル名を削除する
Amazon S3 で django-storages を使用しており、以下を使用して画像ファイルをアップロードしています。
ただし、ファイルが S3 にアップロードされると、元のファイル名が最後に添付されます。それを取り除き、代わりにランダムハッシュと置き換えるにはどうすればよいですか?
django - Djangoアプリのcollectstaticを実行しているときの属性エラー
collectstaticを実行すると、次のエラーが発生します。
ストレージの「AWS_IS_GZIPPED」設定を使用してファイルをgzipで圧縮するまでは、すべて正常に機能します(以下のsettings.pyを参照)。
botoを使用して静的ファイルをS3に送信し、django-compressorを使用して圧縮するdjango-storagesを使用しています。
これが私のエラーの完全なトレースバックです:
これが私のstorage.pyです
これは、 django-compressorのドキュメントから直接取得されます。
私のsettings.pyにも次のものがあります
どんな助けでも大歓迎です。森の中で少し失われました。
css - STATIC_URLを使用したDjangoCSS背景画像
ストレージバックエンドをAmazonS3に変更したところ、自分のサイトのバックグラウンドが読み込まれていないことに気付きました。私は自分のCSS(実際にはSASS)でバックグラウンドURL(static/mysite/images/background.gif
)を指定していることに気づきました。
この問題をどのように修正すればよいのでしょうか。もちろん、新しい静的URLに変更することもできますが、それは悪い習慣のようです。{{ STATIC_URL }}
そこで、body
HTMLにを使用して背景画像をロードしようとrepeat: no-repeat;
しましたが、実際のCSSでレンダリングする前に、最初に背景をレンダリングし、CSSのロード中に画面全体で背景を繰り返します。とにかく、自分のスタイルをドキュメントに混ぜるのは好きではありません。
では、Djangoで背景画像の相対パスを提供するための最良の方法は何ですか?CSSをテンプレートとして設定し、ビューを介してCSSに送信する必要がありますか?それも厄介なようです。
または、static_urlに依存しないようにすることを忘れて、CSSにハードコーディングする必要がありますか?
django - boto を使用した django-storages - mp3 はアップロードできませんが、画像はアップロードできます。また、HTTP 307 の痛みに苦しんでいます
django-storages (1.1.4) の boto (2.2.1) バックエンドを使用して、ファイルを S3 バケットにアップロードしています。画像には問題なく機能しますが、ムービー ファイル (小さい mov、小さい avi) または mp3 をアップロードしようとすると、Broken pipe エラーが発生します。
これは奇妙です。
Django のトレースバックを掘り下げると、次の例外が表示されます。
Cyberduck を使用してバケットを直接検査してきた経験にどのようなものが適合しますか: 証明書*.s3.amazonaws.com
とドメインの間で不一致が発生していると不平を言うことがあります*.s3-external-3.amazonaws.com
実際、バケットのログには、HTTP 307 一時リダイレクトが提供されていることが示されています。AWS が一部のコンテンツ タイプをある方法で送信し、他のコンテンツ タイプを別の方法で送信している可能性がありますが、boto/何かがそれに追いついていないのでしょうか? 映画のアップロードは S3 に 2 回ヒットするようですが、画像は 1 回ヒットするため、boto は 307 の罰金に対処している可能性があります (そして、boto の 307 サポートのクローズド チケットは数年前のものです)。大丈夫、何か他のことが起きています。
しかし、何?楽しく生産的な 1 日からヘッドエンドになり、非常にイライラしています。
何が起きている可能性があるか、および/またはこれを回避するために何を試みるかについて何か提案はありますか?
(これは、boto S3 バックエンドまたはシンプルな S3 バックエンドでは失敗することに注意してください。boto の方が、より具体的なエラーのように見えるだけです)
django - Git 不思議なことに物事を削除する (編集: 実際には django-storages)
問題: 毎回ではありませんが、時々、Git はリポジトリのstatic
ディレクトリを削除します。何が原因かはわかりませんが、ブランチ間をマージするとき、またはブランチをチェックアウトするときに発生するようです. 確認せずにこれを行い、追跡されたファイルを食べます。
背景:
- 私は、いくつかのブランチ、「リリース」、「開発」、複数の機能ラインを持つ (プライベート) プロジェクトを持っています。
- 私たち 2 人 (私と @stevejalim) がレポに取り組んでいます。この問題は私たち二人に起こります。
- 私は git コマンドに純粋にコマンド ラインを使用しています。Steve は、コマンド ラインと Git Tower を組み合わせて使用しています。
static
ディレクトリを持つ Django プロジェクトです。過去のある時点でディレクトリをgit rm
編集したり、ディレクトリに配置したりした可能性がありますが、最近ではありません。そして、私たちの開発ブランチの責任者にはファイルがなく、追跡されています。static
.gitignore
static
.gitignore
static
- これは非常にまれにしか発生しないため、それが私たちが行っていることなのか、断続的な問題なのか、Git のバグなのか、ツリーの破損なのかはわかりません。
- 別のブランチを にマージする場合にのみ発生する可能性があり
develop
ます。ただし、ブランチは常にから分岐しdevelop
、 に戻りますdevelop
。しかし、よくわかりません。 git-flow を使用していますが、git-flow 以外のコマンドを使用した場合にも問題が発生します。
これが発生する可能性がある場合の例として:
1) Steve には、クリーンな (コミットやステージに変更がない) 安定した開発ブランチがありました。彼は新しいリリースをカットし
git flow release start|finish
、その過程で (おそらくマスターから開発への逆マージ)、/static/ ツリー全体が削除されました。2) スティーブは変更を破棄して削除を修復しました (ファイルの削除を本質的に元に戻すため)。しかしその後、スティーブはマスターから開発に戻るだけで、 /static/ ディレクトリが再びザッピングされました (これは Git Tower で発生しました)。
3)機能ブランチからマージして暫定マージとして開発するだけで、それがトリガーされることがあります。ただし、新しいリリースをカットするときに最も頻繁に発生するようです
/static/ ディレクトリのザッピングを修復する方法に関連している可能性はありますか? 削除されたものを一括して元に戻す最良の方法は何ですか? ローカルの変更を破棄したり、HEAD をハード リセットしたりしても、問題は解決しないようです。リベースは私たちを助けるでしょうか?
更新git add .
ブランチを変更せず、マージしないという単純な方法で、これを再び経験しました。それは診断にまったく役立ちますか?
Steve の .git/config の内容は次のとおりです。
の内容は次の.gitignore
とおりです。