質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3170閲覧

Django + Heroku + AWS S3で画像が表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2019/07/04 14:46

Django + Heroku + AWS S3で画像投稿アプリを作成しています。

ローカルではS3から読み込めているのですが、Herokuでは画像が読み込めていません。

Herokuだと画像が表示されず、
https://hoge.herokuapp.com/images/hoge.jpg
と表示されます。

ローカルではS3から表示されているのに、HerokuだとMEDIA_URLのimagesから表示されています。何かコードの順番が問題でしょうか?

コード

  • settings.py
### 省略 ### # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/' STATICFILES_DIRS =[ os.path.join(BASE_DIR, 'static') ] STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') #image settings MEDIA_ROOT = os.path.join(BASE_DIR, 'images') MEDIA_URL = '/images/' #local settings try: from .local_settings import * except ImportError: pass if not DEBUG: SECRET_KEY = os.environ['SECRET_KEY'] AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID'] AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY'] AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME'] DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' AWS_S3_FILE_OVERWRITE = False AWS_DEFAULT_ACL = None import django_heroku django_heroku.settings(locals()) db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True) DATABASES['default'].update(db_from_env)
  • local_settings.py
### 省略 ### #True only in local DEBUG = True #AWS S3 settings AWS_ACCESS_KEY_ID = 'hoge' AWS_SECRET_ACCESS_KEY = 'hoge' AWS_STORAGE_BUCKET_NAME = 'hoge' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' AWS_S3_FILE_OVERWRITE = False AWS_DEFAULT_ACL = None

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

URLをパーマリンクとして使用したい場合はバケットをパブリックアクセス可能にした上で

AWS_S3_CUSTOM_DOMAIN = "https://%s.s3.amazonaws.com/" % AWS_STORAGE_BUCKET_NAME

だと思います。

後は、requirements.txtにdjango-storagesがなくてHerokuにいってないとか...

それでもだめなら

MEDIA_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN

とか...

投稿2019/07/05 01:58

michi_h

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/05 03:42

ご回答ありがとうございます。 試してみたのですが、上手くいきません。。。 requirements.txtもできていると思います。。 ``` dj-database-url==0.5.0 Django==2.2 django-heroku==0.3.1 gunicorn==19.9.0 psycopg2==2.8.2 pytz==2018.7 whitenoise==4.1.2 django-widget-tweaks==1.4.3 psycopg2-binary Pillow==6.0.0 boto3==1.9.183 botocore==1.12.183 django-storages==1.7.1 ``` もしかして`urls.py`が原因なんでしょうか。 ``` from django.urls import path from django.conf.urls.static import static from django.conf import settings from .views import hoge urlpatterns = [ path('hoge/', hoge, name='hoge'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) ``` これに変更とかですかね。。 ``` if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` うーん、ローカルでは動いているんですけどね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問