Heroku にデプロイされた Django プロジェクトがあります。ローカルでは、問題なく動作します。ただし、本番環境には問題があります。管理者がアップロードした画像ファイルを見つけて表示することはできません。
エラーメッセージは次のとおりです。
Failed to load resource: the server responded with a status of 404 (Not Found)
サーバーが試行した URL は次のようなものです。
https://thawing-escarpment-####.herokuapp.com/image.png
これを修正するために、Amazon S3 をメディア ファイルのストレージとして使用しようとしました。私はこれがまったく初めてなので、いくつかのチュートリアルを試しましたが、何も機能しませんでした。
このHeroku チュートリアルを参考にして、というバケットを作成しました。my-website-assets
次に、Heroku の構成をセットアップします。
heroku config:set AWS_ACCESS_KEY=xxx AWS_SECRET_KEY=yyy
heroku config:set S3_BUCKET = my-website-assets
次に、バケットの CORS 構成を変更しました。
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>thawing-escarpment-####.herokuapp.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
app/models.py
私は持っています:
class SpotlightContent(models.Model):
title = models.CharField(max_length=300)
image = models.ImageField(upload_to="")
description = models.TextField()
でtemplates/home.html
:
{% for content in spotlight_contents %}
<img src="{{ content.image.url }}" alt="{{ content.title }}" width="140" height="140">
<p>{{ content.description }}</p>
{% endfor %}
私のファイルで、とsettings.py
に変更を加えました:MEDIA_URL
MEDIA_ROOT
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static', 'static_root')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static', 'static_dirs'),
)
ADMIN_MEDIA_PREFIX = 'https://s3.amazonaws.com/my-website-assets/'
MEDIA_URL = 'https://s3.amazonaws.com/my-website-assets/'
MEDIA_ROOT = ''
これらの変更の後、Django に再度ログインし、新しい Spotlight オブジェクトを追加して、Web ページを更新しました。画像を読み込めなかったので、ソース コードを確認しました。
<img src="https://s3.amazonaws.com/my-website-assets/test_icon.png" alt="Test" width="140" height="140">
<p>This is a test. Please work!</p>
URL は Amazon AWS のものですが、画像リソースが見つからないため、適切に追加されていないと思われます。これを機能させる方法を知っている人はいますか?前もって感謝します。