DjangoのローカルDBからデータを抽出してherokuにアップ

メモ
dumpdataしてloaddataする

$ python manage.py dumpdata > dump.yaml
全テーブル取得。

$ python manage.py dumpdata –indent 2 > dump.yaml
–indentでインデントしてくれる。
数字だけ?2は半角スペース2つでインデント

$ python manage.py dumpdata –indent 2 map.prefecture > dump.yaml
テーブルを指定することができる。
上記はmapアプリのprefectureテーブルを指す。

$ python manage.py dumpdata –indent 2 map.prefecture map.city > dump.yaml
当然複数テーブル指定可能。

$ python manage.py dumpdata –indent 2 –exclude map.prefecture > dump.yaml
基本全部で一部除外したい時は–exclude

ローカルのdb.sqlite3のデータをherokuにコピーする。

ローカルの開発環境ではdb.sqlite3を使っている。
テストデータといっても、本番と変わらないデータが入っているので、これをherokuのDBに流し込みたい。

DjangoにはFixtureという機能が付いている。
YamlやJSON形式で作成したデータをDBに流し込む仕組み。

fixturesというディレクトリにファイルを格納し

$ python manage.py loaddata ファイル名

のようにコマンドを実行する。

流し込むファイル自体を作るコマンドがある。

$python manage.py dumpdata > dump.json

を実行するとdump.jsonというファイルを生成してくれる。

が、これで作成したファイルをloaddataするとエラーが出る。
存在しているテーブル全てをdump.jsonに含めているが、中にはどうやら不要なテーブルも存在していて、それは除外する必要があるようだ。

Monotalkの記事を参考にしました。

python manage.py dumpdata --exclude auth.permission --exclude contenttypes > dump.json

不要なテーブルを除外するオプションが追加されている。

これを

$ git add fixutures/dump.json
$ git commit -m  'コメント'
$ git push heroku master
$ heroku run python manage.py loaddata dump.json

すれば

Running python manage.py loaddata dump.json on ⬢ アプリ名… up, run.8075 (Hobby)
Installed 566 object(s) from 1 fixture(s)

のように正常に登録ができる。

ローカルのdb.sqlite3の中身をherokuにコピーする

ローカルの開発環境ではdb.sqlite3を使っている。
テストデータといっても、本番と変わらないデータが入っているので、これをherokuのDBに流し込みたい。

DjangoにはFixtureという機能が付いている。
YamlやJSON形式で作成したデータをDBに流し込む仕組み。

fixturesというディレクトリにファイルを格納し

$ python manage.py loaddata ファイル名

のようにコマンドを実行する。

流し込むファイル自体を作るコマンドがある。

$python manage.py dumpdata > dump.json

を実行するとdump.jsonというファイルを生成してくれる。

が、これで作成したファイルをloadfileするとエラーが出る。
存在しているテーブル全てをdump.jsonに含めているが、中にはどうやら不要なテーブルも存在していて、それは除外する必要があるようだ。

Monotalkの記事を参考にしました。

python manage.py dumpdata --exclude auth.permission --exclude contenttypes < dump.json

不要なテーブルを除外するオプションが追加されている。

これを

$ git add fixutures/dump.json


https://mclolipop.zendesk.com/hc/ja/articles/360011824713–Python-Django-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9FWeb%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90

$ django-admin startproject mysite .

のように「.」をつけるとカレントディレクトリで展開される。

PythonのvenvにDjangoをインストール

https://djangogirlsjapan.gitbook.io/workshop_tutorialjp/django_installation
venvはPython自体が持つ仮想環境作成機能。

仮想環境作成

$ python3 -m venv [[任意の名前]] 

仮想環境起動

$ source [[任意の名前]]/bin/activate

仮想環境のpipを最新に

$ pip install --upgrade pip

仮想環境のpipを最新に

$ pip install django

仮想環境終了

$ deactivate

HerokuにDjangoアプリをデプロイする

https://devcenter.heroku.com/articles/getting-started-with-python

  1. herokuにアカウントを作る。
  2. Heroku CLIをインストール
  3. runtime.txtrequirements.txtというファイルが必要らしい。

    $pip freeze > requirements.txt

    で作れる。

    $ heroku create

    上記コマンドを実行すると、

    :
    remote: ! Error while running ‘$ python manage.py collectstatic –noinput’.
    remote: See traceback above for details.
    remote:
    remote: You may need to update application code to resolve this error.
    remote: Or, you can disable collectstatic for this application:
    remote:
    remote: $ heroku config:set DISABLE_COLLECTSTATIC=1
    remote:
    remote: https://devcenter.heroku.com/articles/django-assets
    remote: ! Push rejected, failed to compile Python app.
    remote:
    remote: ! Push failed
    remote: Verifying deploy…
    remote:
    remote: ! Push rejected to caffca.
    remote:

    DisallowedHost at /
    Invalid HTTP_HOST header: ‘caffca.herokuapp.com’. You may need to add ‘caffca.herokuapp.com’ to ALLOWED_HOSTS.