

Django2.0で、APIを使って最新情報を取得するページを作成しました。  
（ある種のニュースを集めてくるページ）  
ローカル（sqlite3使用)ではきちんと情報が表示されて、表示されたリンク先のウェブサイトにも  
問題なくアクセスできます。しかしHerokuにデプロイすると、他のページ（ブログページや  
トップページ）は問題なく閲覧できますが、このAPIページだけサーバーエラー500になって  
しまいます。  
本番用データベースはPostgreSQL使用です。  
解消方法のヒントを頂けますと幸いです。

手順ですが、  
views.pyに

[code]

    from django.http import HttpResponse
    from django.shortcuts import render
    from . import models
    
    def cryptohome(request):
        import requests
        import json
    
    api_request = requests.get("https://min-api.cryptocompare.com/data/v2/news/?lang=EN")
    api = json.loads(api_request.content)
    return render(request, 'cryptohome.html', {'api':api})
    
[/code]

と書きました。その後、

[code]

    $ pip install djangorestframework
    
[/code]

を実行し、

requirements.txtに  
`djangorestframework==3.8.2` を追記しました。

settings.pyに

[code]

    INSTALLED_APPS= (
       ...
       'rest_framework',
    )
    
[/code]

を追加しました。

このprojectのルート内のurls.pyに

[code]

    from rest_framework import routers, serializers, viewsets
    
[/code]

を追加しました。

Databese設定は、  
settings.pyにて以下です。

[code]

    import dj_database_url
    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
    db_from_env = dj_database_url.config()
    DATABASES = {
            'default': dj_database_url.config()
    }
    ALLOWED_HOSTS = ['*']
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    
    try:
        from .local_settings import *
    except ImportError:
        pass
    
[/code]

local_settings.pyは開発環境用の切り替えとして以下を記述してあります。

[code]

    import os
    
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    DEBUG = True
    
[/code]

...これだとAPIを使ったページだけがエラーとなります。

他に設定が必要な個所や、見直す点があれば、ご教示頂けますと大変幸いです。  
よろしくお願い致します。

追記：  
$ heroku logs -t で出力されたものは以下です：

[code]

    2018-07-22T11:56:28.956799+00:00 heroku[web.1]: Restarting
    2018-07-22T11:56:28.957370+00:00 heroku[web.1]: State changed from up to starting
    2018-07-22T11:56:29.770993+00:00 heroku[web.1]: Stopping all processes with SIGTERM
    2018-07-22T11:56:29.790091+00:00 app[web.1]: [2018-07-22 20:56:29 +0900] [8] [INFO] Worker exiting (pid: 8)
    2018-07-22T11:56:29.790115+00:00 app[web.1]: [2018-07-22 20:56:29 +0900] [9] [INFO] Worker exiting (pid: 9)
    2018-07-22T11:56:29.790117+00:00 app[web.1]: [2018-07-22 11:56:29 +0000] [4] [INFO] Handling signal: term
    2018-07-22T11:56:29.991982+00:00 app[web.1]: [2018-07-22 11:56:29 +0000] [4] [INFO] Shutting down: Master
    2018-07-22T11:56:30.111945+00:00 heroku[web.1]: Process exited with status 0
    2018-07-22T11:56:35.953544+00:00 heroku[web.1]: Starting process with command `gunicorn portfolio.wsgi`
    2018-07-22T11:56:39.481831+00:00 app[web.1]: [2018-07-22 11:56:39 +0000] [4] [INFO] Starting gunicorn 19.9.0
    2018-07-22T11:56:39.482632+00:00 app[web.1]: [2018-07-22 11:56:39 +0000] [4] [INFO] Listening at: http://0.0.0.0:26403 (4)
    2018-07-22T11:56:39.482816+00:00 app[web.1]: [2018-07-22 11:56:39 +0000] [4] [INFO] Using worker: sync
    2018-07-22T11:56:39.491396+00:00 app[web.1]: [2018-07-22 11:56:39 +0000] [8] [INFO] Booting worker with pid: 8
    2018-07-22T11:56:39.603360+00:00 app[web.1]: [2018-07-22 11:56:39 +0000] [9] [INFO] Booting worker with pid: 9
    2018-07-22T11:56:39.954652+00:00 heroku[web.1]: State changed from starting to up
    2018-07-22T11:56:58.666392+00:00 heroku[run.1568]: Awaiting client
    2018-07-22T11:56:58.728641+00:00 heroku[run.1568]: Starting process with command `python manage.py migrate`
    2018-07-22T11:56:58.831682+00:00 heroku[run.1568]: State changed from starting to up
    2018-07-22T11:57:07.660418+00:00 heroku[run.1568]: Process exited with status 0
    2018-07-22T11:57:07.827065+00:00 heroku[run.1568]: State changed from up to complete
    2018-07-22T11:57:14.175890+00:00 heroku[router]: at=info method=GET path="/" host=mysite.herokuapp.com request_id=6769f7c0-9bf4-40db-b96d-26940c7e81ea fwd="126.65.255.215" dyno=web.1 connect=1ms service=719ms status=200 bytes=3986 protocol=https
    2018-07-22T11:57:14.173392+00:00 app[web.1]: 10.136.66.169 - - [22/Jul/2018:20:57:14 +0900] "GET / HTTP/1.1" 200 3795 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5"
    2018-07-22T11:57:14.542249+00:00 heroku[router]: at=info method=GET path="/assets/js/vendor/popper.min.js" host=mysite.herokuapp.com request_id=eb821792-f306-446e-a5cd-ee0d2df7d92c fwd="126.65.255.215" dyno=web.1 connect=1ms service=144ms status=404 bytes=286 protocol=https
    2018-07-22T11:57:14.539924+00:00 app[web.1]: 10.136.66.169 - - [22/Jul/2018:20:57:14 +0900] "GET /assets/js/vendor/popper.min.js HTTP/1.1" 404 104 "https://mysite.herokuapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5"
    2018-07-22T11:57:15.138026+00:00 heroku[router]: at=info method=GET path="/dist/js/bootstrap.min.js" host=mysite.herokuapp.com request_id=29f47d8f-bed6-4d83-a5b8-dc91def39b38 fwd="126.65.255.215" dyno=web.1 connect=0ms service=20ms status=404 bytes=279 protocol=https
    2018-07-22T11:57:15.136952+00:00 app[web.1]: 10.149.166.79 - - [22/Jul/2018:20:57:15 +0900] "GET /dist/js/bootstrap.min.js HTTP/1.1" 404 98 "https://mysite.herokuapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5"
    2018-07-22T11:57:16.017686+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=mysite.herokuapp.com request_id=b8dd6a41-3f80-4ac2-a127-370de703bea1 fwd="126.65.255.215" dyno=web.1 connect=1ms service=5ms status=404 bytes=266 protocol=https
    2018-07-22T11:57:16.013979+00:00 app[web.1]: 10.30.71.104 - - [22/Jul/2018:20:57:16 +0900] "GET /favicon.ico HTTP/1.1" 404 85 "https://mysite.herokuapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5"
    2018-07-22T11:57:17.801833+00:00 heroku[router]: at=info method=GET path="/crypto/" host=mysite.herokuapp.com request_id=87974ffb-db18-4f77-9868-a0381648859d fwd="126.65.255.215" dyno=web.1 connect=1ms service=133ms status=500 bytes=234 protocol=https
    2018-07-22T11:57:17.799404+00:00 app[web.1]: 10.136.66.169 - - [22/Jul/2018:20:57:17 +0900] "GET /crypto/ HTTP/1.1" 500 27 "https://mysite.herokuapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5"
    2018-07-22T12:04:55.324460+00:00 heroku[router]: at=info method=GET path="/crypto/" host=mysite.herokuapp.com request_id=d63aa4af-e08e-4f96-b75a-fade50d474f6 fwd="126.65.255.215" dyno=web.1 connect=1ms service=35ms status=500 bytes=234 protocol=https
    2018-07-22T12:04:55.322680+00:00 app[web.1]: 10.47.227.241 - - [22/Jul/2018:21:04:55 +0900] "GET /crypto/ HTTP/1.1" 500 27 "https://mysite.herokuapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
[/code]


CC BY-SA 4.0
2018-07-22T05:08:23.013
46826
2019-08-26T08:03:35.497
2018-07-22T13:28:20.093
28573
28573
question
api django heroku
Django2.0でAPIを使ったページだけがHerokuでエラー


解決しました！

エラー原因を見るべくsettings.pyのDEBUG=Trueにして再度デプロイしました。  
問題のページには ImportError: No module named requests  
と表示されました。

$pip install requests  
を実行したら、requirement already satisfiedと表示されました。

requrements.txtにこのrequestsを追記していなかったことに気づき、  
requests==2.19.1を追加して再度デプロイしました。

これでうまく行きました。本番環境に理想通りのページが表示されました。  
有難うございました。


CC BY-SA 4.0
2018-07-23T00:55:33.040
46847
2018-07-23T00:55:33.040
28573
46826
answer