【Linebot #1】windows8.1(local)とherokuでpostgreSQL環境構築 (psycopg2)
Linebotを最近書いているのですが、そろそろオウム返しbotだけだとつまらないので、データベースを組み込みたいなと。
もともとsqlite3を使っていたのですが、Herokuはsqliteが簡単に使えないことをdeploy時に気づき、やむなくpostgres対応を考えることに。。
そこまでの手順とハマったことの覚書です。
手順は次です。
1. ローカルのwindows環境でpostgresをインストール・動作確認
2. heroku環境でpostgresをAddon追加・動作確認
1. ローカルのwindows環境でpostgresをインストール・動作確認
まず動作確認用のローカル環境を準備
1.2. pythonから実行するためのモジュール(psycopg2)をインストール
次でインストール
>pip install psycopg2
動作確認
>python Python 3.4.3 |Anaconda 2.3.0 (64-bit)| (default, Mar 6 2015, 12:06:10) [MSC v.1 600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import psycopg2 >>>
エラーなしでOK!
たった手順2つで簡単に環境が揃いました。
あとは、psycopg2のAPIで接続やテーブル作成してみて動いていることを確認。
2. heroku環境でpostgresをAddon追加・動作確認
実はherokuでのpostgres環境構築は、windows環境よりはるかに楽でした。
(というかwindows側いらなかったと反省、インストールも早いし)
やることは、「herokuアプリケーションに heroku-postgresql Addonを追加」する。
herokuはpostgresをaddonとして対応(無料)しているのでこれを使う。
しかもheroku-postgresqlはherokuと独立したインスタンスを提供されます。
なので、ローカルで動作確認したい場合は、上記1.1で飛ばして、ローカルからpsycopg2で接続すればおk!
2.1. heroku-postgresql Addonの確認
確認方法1 (GUI)
https://dashboard.heroku.com/apps/application_id/resources
※application_idは自分のlinebotをdeployしているアプリケーションID
ここにheroku-postgresql Addonがあるか確認
確認方法2 (CUI)
>heroku addons --app <application_id>
無ければ次へ。
2.2. heroku-postgresql Addonの追加
>heroku addons:add heroku-postgresql --app <application_id>
下図のように、https://dashboard.heroku.com/apps/application_id/resourcesに追加されています。
2.3. heroku-postgresql Addonの設定取得
>heroku config --app <application_id> DATABASE_URL: postgres://aaaa:bbbb@cccc:dddd/eeee LINE_CHANNEL_ACCESS_TOKEN: xxxxxxxxxxxxxxxxxxxxxxxxxxx LINE_CHANNEL_SECRET: yyyyyyyyyyyyyyyyyyyyyyyyyyy
今回重要なのは、[DATABASE_URL]説明は次の通りです。
aaaa | user_name |
bbbb | password |
cccc | server_name (私の環境はawsの模様) |
dddd | port |
eeee | database_name |
psycopg2での接続は次のような対応になります。
import psycopg2 user = aaaa pwd = bbbb server = cccc port = dddd db = eeee con = psycopg2.connect("host=" + server + " port=" + port + " dbname=" + db + " user=" + user + " password=" + pwd)
なので、ローカル環境でもdeploy先のherokuでも上記で繋げばOKです。