HerokuでWagtail（Django製CMS）を使うまでのあれこれ

#この記事の書き始めの状態
freeでinstallして利用するCMSといえば、wordpress。
しかし、ちょっとなんか好きじゃない感があり…（がんばれよ、自分。）
別のものを使いたいな、と始めたのが[wagtail](https://wagtail.io/)という、django製のものです。

ローカル環境で作るぶんには簡単で、Jinja2なるものも初めてさわったけど、なんかいい感じでした。

そう………ローカル開発までは。
基本的にデザイナーとしてコーディングできるよ、が基本技術の私にとっては、サーバーで実公開するのがめちゃくちゃわけわからんのです。

今回作ってみてるものは、せっかくなのでついでに自分のサイトでも持つか！公開しちゃうか！なつもり＋実験で作っていたので無料なプランでちょっと始めたかったのですが、static site的な勢いや、レンサバのWPプランと違って、Pythonってそういう公開場所、無いのね…

ということで、ちょっとしたものを過去にも置かせたもらったHerokuを利用することにしました。

そして気づく…
wagtailで初期設定されているSQliteがHerokuで使えないことを。デプロイしてみてアプリ、壊れてる的なエラーを吐きだされたことで気づいたわけです。

しかもそのタイミングで、マイmac壊れる…という。
なので、ちょっとの期間、仮に利用できたwin10 PCに持ち替えて、状況打破の実験。


# ローカル環境にPostgreSQLを準備する
※記載残しておくけど、結果として必要なかった

## ~~ローカルPCにインストール~~

~~参照：https://www.dbonline.jp/postgresql/install/index1.html~~
~~インストール元：https://www.postgresql.org/download/~~
~~今回インストールしたversion：Windows x86-32　/ 10.6-1~~

~~ついでパッケージは入れずにFinish!~~

##~~PATHの設定~~
~~1. インストールした先のディレクトリからbinフォルダのパスをコピー~~
~~2. システム環境設定⇒環境変数⇒システム環境変数⇒Pathを選択、編集~~
~~3. 新規作成して、コピーしたパスを入力~~
~~4. OKして終了~~

##~~確認~~
~~コマンドプロンプトで `psql --v` ⇒バージョン確認　入ってるの確認できた。~~
~~…あれ？最初試したときできなかったのはなぜ？（一回アンインストールしてやりなおした。）~~

# hiroku-djangoの確認

##参照
https://devcenter.heroku.com/categories/python-support
https://devcenter.heroku.com/articles/getting-started-with-python
https://devcenter.heroku.com/categories/working-with-django


getting-started-with-pythonに言われるがままやってみる。
⇒デプロイして、Herokuサーバー上で動いたの確認


#制作するアプリの設定

##wagtailをインストール

###参照
http://docs.wagtail.io/en/v2.4/getting_started/tutorial.html

###やること
`pip install wagtail`　：wagtailのインストール　
`wagtail start myproject`　：wagtailプロジェクトを作成 
`cd myprojct`

`pip install -r requirements.txt`　：依存モジュールの一覧ファイルインストール


##設定ファイルの準備

###参照
https://wagtail.io/blog/deploying-wagtail-heroku/
https://devcenter.heroku.com/articles/django-app-configuration

###（2018.1.26追記）改めてやったら
「設定ファイルの準備」の項目、改めてやったら
・django-toolbelt
・django-heroku
・sycopg2
全てwagtailに入ってました。
が、下記、そのまま残しておきます。

###django-toolbeltのインストール

` pip install django-toolbelt `

###Procfileの作成
初めてやるときって、コマンドで設定してるうちに自動で落ちてくるものなのか、こちらで手動作成して提供するものなのか？？になるんですよね…
ということで一応メモ。「Procfile」という名前の拡張子無ファイルを手動で作って、プロジェクトのルートに置いておく。

``` Procfile
（Procfileの中身）

web: gunicorn myproject.wsgi --log-file -
```

※myprojectの部分は自分のプロジェクト名（Herokuのappではなく、wagtailのproject）

###gunicornインストール

`pip install psycopg`

### runtime.txtの作成

使うパッケージのバージョンを固定するため、らしい。プロジェクトルートに手動作成。

```runtime.txt
python-3.7.0
```

### django-herokuのインストール・設定

`pip install django-heroku`：インストール

```myproject/setteings/base.py

(ファイルの先頭)
import django_heroku

(ファイルの最後)
django_heroku.settings(locals())
```


###requirements.txtの追記

アプリを動かすうえで必要になるモジュールを伝えるファイル。
`pip freeze > requirements.txt`　：ファイルに追記。

- dj-database-url
- django-heroku
- django-toolbelt
- gunicorn
- whitenoise

が入っていることを確認。（ここまでに意識してインストールしたもの以外はwagtailでデフォルト入ってるの...かな？いろいろゴニョゴニョしてるうちにわからんくなった。）
他、いろいろ入っているけど、Herokuにアップする！の用途で調べてて出てくるのは↑の感じ。（static設定（whitenoise）とか、mac戻ってきたらいるかな…）

###本番環境用設定ファイルを追記

Wagtailのブログで言ってることをコピってみた。

```myproject/setteings/production.py
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] =  dj_database_url.config()
	
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']
```

##Herokuアップ用にgitignore設定

`.gitignore`ファイルをプロジェクトルートに作成
※なんで、この中身なのかわかってません。

```
(.gitignoreの中身)

*.pyc
.DS_Store
*.swp
/static/
.env
```

※メモ：windowsで、.から始まるファイルの作成⇒.filename.のように、最後にも.をつける。

#Herokuへデプロイ

##まず、デプロイ
↓Herokuのダッシュボードのdeployメニューに書いてあるとおり。

` heroku login `　：Herokuにログイン
` heroku git:clone -a herokunoapp ` ：Herokuでgitクローン 
`git add .` `git commit -am "first contact"` `git push heroku master` ：git　コミットからのプッシュ。


##wagtailを展開

`heroku run python manage.py migrate` ：wagtailアプリのデータベース作成
`heroku run python manage.py createsuperuser`　：スーパーユーザー作成


アクセスしてみる。(↓URLはイメージです。)
https://[herokunoapp].herokuapp.com/
https://[herokunoapp].herokuapp.com/admin
できたTT

#修正を加えてみる

```home/models.py

from django.db import models

from wagtail.core.models import Page
from wagtail.core.fields import RichTextField \追加
from wagtail.admin.edit_handlers import FieldPanel \追加

class HomePage(Page):
    body = RichTextField(blank=True)　 \追加

    content_panels = Page.content_panels + [　
        FieldPanel('body', classname="full"),
    ]　 \追加


```

```home/templates/home/home_page.html

{% extends "base.html" %}

{% load wagtailcore_tags %}  \追加

{% block body_class %}template-homepage{% endblock %}

{% block content %}
    <h1>Welcome to your new Wagtail site!</h1>

		<h2>Here is {{ page.title }}</h2>  \追加


		<main>
	    {{ page.body|richtext }}  \追加
		</main>
{% endblock %}

```

##ローカル環境でwagtail展開

そういえば、Herokuで動かすのに必死で、ローカルでmigrationしたりしてない。
`python manage.py migrate` `python manage.py createsuperuser` `python manage.py runserver`

⇒ローカル環境で動いた！

##Herokuにデプロイ
`git add .` `git commit -am "repair home after local migrate"` `git push heroku master`

⇒アプリURLにアクセス！
⇒bodyの修正分、エラーが出る
⇒`heroku run python manage.py migrate` ：Herokuでmigrate
⇒再度アクセス！
⇒できたTT

#あとは、
macの修理戻ってきたときに、作ってたアプリのデータが残っていることを祈りつつ
（バックアップとれてないまま、画面が映らなくなった…）
戻ってきたら、設定ファイルマージしつつアップしましょう！

#ところで、
環境変数をどこにも設定してないのですが、production.pyが動いとるわけで。
わかってない。
とりあえず、ローカルSQliteで、HerokuがPostgreSQLで動くようになったTT