🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

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

Heroku

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

Q&A

解決済

1回答

1450閲覧

herokuデプロイ後、heroku restartをしないとブログ記事が更新されない

Neru_K

総合スコア19

Django

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

Heroku

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

0グッド

1クリップ

投稿2020/12/09 11:42

編集2020/12/20 22:24

発生している問題

Django初心者です。
Webアプリづくりに挑戦してみようと思い、まずは書籍を見ながらDjangoでWebサイトを作りました。
Django,Docker,Gitなどどれも初めてで、苦労しながらもとりあえずherokuにデプロイさせることができました(もちろんherokuも初めてです)。
問題なくWebサイトが表示され、またDjango管理画面からブログの記事やギャラリー画像の投稿もできるようになったのですが、
一方で投稿した記事や画像が、「heroku restart」コマンドを実行しないかぎりサイトに表示されません。
管理画面から投稿したら、ほとんどリアルタイムでサイトに反映されると思っていたのですが、何が原因なのでしょうか????

試したこと

最初キャッシュが残っているせいで表示できていないのかと思い、キャッシュのクリアやシークレットモードで確認しましたが更新されませんでした。
一晩たっても更新されず、heroku restartコマンドをするとすぐにブログ記事が反映されました。

補足情報(FW/ツールのバージョンなど)

Django 3.1.2
gunicorn 20.0.4
psycopg2-binary 2.8.6
whitenoise 5.2.0
environs 8.0.0
python-dotenv 0.14.0

データベースはpostgreSQL、画像はqiitaを見ながらCloudinaryというところにアップしています。
heroku restart したあとは画像もきちんと表示されています。
herokuは有料のdyno(7$のやつ)を使用しています。

どのような情報を記載したらよいかもあまり分かっていないため、これだけじゃ分からないよ!などあれば指摘して頂ければ情報を追記いたします????
こういう原因が考えられるのではないか?などヒントとなるようなことでも結構ですので、教えていただければ大変ありがたいです。
拙い質問ですが何卒宜しくお願い致します????

追記情報 ブログ部分のコード

ブログに関する部分のコードです。
ブログの記事は、×××.com/ のホームと、×××.com/blog/のブログページのそれぞれに一覧表示として表示させております。詳細ページは作っていません。
カテゴリーの部分は書籍には載っておらず、ググりながら追加したものですのでなにかおかしなところがあるかもしれません????

Python

1blog/models.py 2-------------- 3 4from django.db import models 5 6class Category(models.Model): 7 name = models.CharField('カテゴリー', max_length=50) 8 9 def __str__(self): 10 return self.name 11 12 13class Blog(models.Model): 14 title = models.CharField(max_length=100) 15 body = models.TextField() 16 created_at = models.DateField('作成日', auto_now_add=True) 17 updated_at = models.DateField('更新日', auto_now=True) 18 19 category = models.ForeignKey( 20 Category, verbose_name='カテゴリー', 21 on_delete=models.PROTECT 22 ) 23 image = models.ImageField(upload_to='blogs/',blank=False) 24 25 # 管理画面の一覧にタイトルを表示させるようにする 26 def __str__(self): 27 return self.title 28

Python

1blog/views.py 2------------- 3from django.shortcuts import render 4from django.views.generic import ListView 5from .models import Category, Blog 6from django.views import generic 7 8 9# Create your views here. 10class BlogListView(ListView): 11 model = Blog 12 context_object_name = 'blog_list' 13 template_name = 'blog.html' 14 paginate_by = 5 15 16 def get_queryset(self): 17 return Blog.objects.order_by('-updated_at') 18 19""" カテゴリー一覧 """ 20 21class CategoryView(generic.ListView): 22 model = Blog 23 template_name = 'blog/index.html' 24 25 def get_queryset(self): 26 category = Category.objects.get(name=self.kwargs['category']) 27 queryset = Blog.objects.order_by('-id').filter(category=category) 28 return queryset 29 30 def get_context_data(self, **kwargs): 31 context = super().get_context_data(**kwargs) 32 context['category_key'] = self.kwargs['category'] 33 return context 34

Python

1blog/urls.py 2------------ 3from django.urls import path 4from .views import BlogListView 5from . import views 6 7urlpatterns = [ 8 path('', BlogListView.as_view(), name='blog_list'), 9 path('category/<str:category>/', views.CategoryView.as_view(), name='category'), 10]

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

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

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

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

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

A_kirisaki

2020/12/19 10:52

一覧表示画面の view 関数を貼っていただけますか?なにかわかるかもしれません。
Neru_K

2020/12/20 22:30

ありがとうございます! views.pyのコードを貼るので合ってますでしょうか????? 一応、ブログ部分のviews.pymodels.py、urls.pyを掲載しました! ご確認いただけましたらうれしいです<(_ _)>
guest

回答1

0

ベストアンサー

Python と Web 歴はそこそこなんですが Django エアプなんでそこは勘弁を。ソースコードやドキュメントは読んできました。

多分 objects に直接 order_by を噛ますのが悪いんではなかろーかというのが予想です。なので

Python

1category = Category.objects.get(name=self.kwargs['category']) 2queryset = Blog.objects.order_by('-id').filter(category=category)

Python

1category = Category.objects.get(name=self.kwargs['category']) 2queryset = Blog.objects.filter(category=category).order_by('-created_at')

とするとよいと思われます。'-id' よりは '-created_at' の方が多分安全。

残る

Python

1Blog.objects.order_by('-updated_at')

Python

1Blog.objects.all().order_by('-updated_at')

としてやるといけると思います。

なんでかというと「ソースコードから見る勘」と言う煮えきらない答えになってしまうのですが、order_by を直接 objects に使うとうまく SQL が動かずキャッシュを返してしまっている気がします。これでダメだったらリポジトリ見せて別途ご相談ください。とても気になる。

投稿2020/12/21 16:47

A_kirisaki

総合スコア2853

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

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

Neru_K

2020/12/21 23:57

ご回答ありがとうございます! なるほど、これもキャッシュが原因の可能性が高いのですね。恥ずかしながらキャッシュというとWebブラウザが保存するキャッシュのことしか認識していませんでした????大変勉強になります。 教えていただいようにコードを編集し、ブログを投稿してみました。 それからサイトを表示してみたところ、うまく表示されており成功したかな!?と思ったのですが、 何度か試してみたところやはり同じく更新がリアルタイムで反映されないようです???? ふと思い当たったのですが、参考とした書籍のほうに「このプロジェクトでキャッシュを実装するのは間違いなくやりすぎだけども~」と前置きをしたうえで、キャッシュに関する設定が記載されていました。よくわかっていないままconfig/settings.pyに書き加えたのですが、このことがもしかして関係しますでしょうか? ``` MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', #省略 'django.middleware.cache.FetchFromCacheMiddleware', ] CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_SECONDS = 604800 CACHE_MIDDLEWARE_KEY_PREFIX = '' ``` 大変恐縮ですがもしレポジトリを見ていただけてなにかヒントとなることがお分かりでしたら、教えていただけましたら大変うれしいです???? リポジトリがプライベートなのですが、手順があっているか心配ですがリポジトリに招待?させていただいております<(_ _)>????
A_kirisaki

2020/12/22 04:33

アッ!!それです!!キャッシュ系削除してみてください!!!
Neru_K

2020/12/27 06:13

ありがとうございます!!! A_kirisakiさんのおかげさまで無事解決できたようです???? お返事遅くなり申し訳ありません、お忙しいところお答えいただき本当に大感謝です<(_ _)> これからもっと勉強を続けて広く知識を増やせるよう精進いたします!
A_kirisaki

2020/12/27 06:31

おめでとうございます???????? 楽しく学んでくださいね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問