6

現在、Amazon S3 から STATIC_URL を介して静的ファイルを提供している Heroku アプリの MEDIA_URL を設定しようとしています。静的ファイルは正常に動作していますが、現在の STATIC_URL に加えて MEDIA_URL を追加しようとすると、ページがまったくレンダリングされなくなり、アプリが動作しなくなります。

現在の設定は次のとおりです。

AWS_STORAGE_BUCKET_NAME = 'bucketname'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
STATIC_URL = S3_URL
AWS_ACCESS_KEY_ID = 'KEY'
AWS_SECRET_ACCESS_KEY = 'SECRET_KEY'

追加すると:

MEDIA_URL = S3_URL
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

それが問題を引き起こします。具体的には、DEFAULT_FILE_STORAGE を削除しても同じ問題が残るため、MEDIA_URL に問題があります。しかし、これを介してユーザーがアップロードしたメディアを提供する最善の方法を決定しようとしていますが、うまくいきません。

これを達成するための最善の方法を誰かが知っているなら、それは大歓迎です。

4

2 に答える 2

2

STATIC_URL と MEDIA_URL に同じ値を指定することはできません。エラーが発生します。

私は同じ問題を抱えていました/まだ抱えていて、それを行うためのきれいな方法を見つけることができませんでした. より良い答えを待ちますが、これが私が解決した方法です(醜いハック):

私はdjango_storagesdjango_compressorを使用しています。メディア ファイルは S3 バケットのルートに表示されるため、STATIC_URL からアクセスできます。私のsettings.pyで:

COMPRESS_URL = "https://s3.amazonaws.com/bucketname/"
STATIC_URL = COMPRESS_URL

ローカルの開発環境では MEDIA_URL を使用し、本番環境では STATIC_URL を使用しています。ローカル環境では True、Heroku では False の値を持つ環境変数を設定し、context_processor 環境に配置します。

次に、次のようにテンプレート内のメディア ファイルにアクセスできます。

background-image: url({% if env == 'True' %}{{ MEDIA_URL }}{% else %}{{ STATIC_URL }}{% endif %}{{ course.image }});

動作しますが、醜いです。うまくいけば、誰かがより良い解決策を見つけたので、コードのリファクタリングを実行しました:)

edit より良い方法があります。このアプリを使用すると、S3 に静的フォルダーとメディア フォルダーを作成できます。

于 2012-07-10T08:31:44.857 に答える