2017-01-11 1 views
0

基本的な学習用のブログアプリがあります:アプリの管理フォームからアップロードされた画像付きの「ブログ投稿」が別のバージョンをプッシュするまでうまくいきますheroku経由で。その後、画像に壊れたimgアイコンが表示され、画像アドレスを見たときの画像ターゲットが同じでも、アプリが画像を見つけることができません。Django + Heroku:次のプッシュまでの画像作業

私は何かについて根本的に重要な何かを見逃しているように感じます - なぜ私はこれをGoogleによって修正することができないのでしょうか?誰が私がここに足を踏み入れているのか知っていますか?私はこの権利に近づいていますか?

私は静的ファイルを提供するためにDjango + Gunicorn + dj-staticを使用しています。ここで

はモデルです:

class Post(models.Model): 
    title = models.CharField(max_length=100) 
    content = models.TextField() 
    picture = models.ImageField(upload_to='blog/static/blog/images') 
    section = models.ForeignKey('Section') 
    posted = models.DateTimeField(auto_now_add=True) 
    posted_by = models.TextField() 
    tags = models.ManyToManyField('Tag') 
    def __str__(self): 
     return self.title 

ビュー:静的なファイルを扱う

<hr> 
    <img src="{{ picture.url }}"> 
<hr> 

はsettings.py:

画像、HTMLを含む

def detail(request, post_id): 
    post = Post.objects.get(id=post_id) 
    picture = post.picture 
    context = {'post': post, 'picture': picture} 
    return render(request, 'blog/detail.html', context) 

スニップ

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.10/howto/static-files/ 

STATIC_ROOT = 'staticfiles' 
STATIC_URL = '/static/' 

BOOTSTRAP3 = {'include_jquery': True} 

LOGIN_URL = '/users/login' 

MEDIA_ROOT = 'media' 
MEDIA_URL = '/media/' 

#Herokusettings 
if os.getcwd() == '/app': 
    import dj_database_url 
    DATABASES = { 
     'default' : dj_database_url.config(default='postgres://localhost') 
    } 

    DEBUG = False 

    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

    ALLOWED_HOSTS = ['*'] 

    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 

    # Static files (CSS, JavaScript, Images) 
    # https://docs.djangoprojectcom/en/1.9/howto/static-files/ 
    STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles') 
    STATIC_URL = '/static/' 

    MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media') 
    MEDIA_URL = '/media/' 

    # Extra places for collectstatic to find static files. 
    STATICFILES_DIRS = (
     os.path.join(PROJECT_ROOT, 'static'), 
    ) 

とwsgi.py:

import os 

from django.core.wsgi import get_wsgi_application 
from dj_static import Cling, MediaCling 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bss.settings") 
application = Cling(get_wsgi_application()) 
application = Cling(MediaCling(get_wsgi_application())) 

#application = get_wsgi_application() 

は、私はこのすべてがどのように機能するかについての基本的な何かが欠けているように私は感じて、これに表情を与えていただき、ありがとうございます。

答えて

0

ヘロクのデフォルトのアップロード場所は一時的な保存場所です。これは、デプロイするたびに別のWebワーカーを取得するためです。

ファイルを保存するには、S3または別の場所を使用する必要があります。幸運なことに、これはHerokuのPaperclipでよく説明されています。

+1

ありがとうございました!私はそれを調査します! – InspectorBean

関連する問題