2018年7月1日日曜日

herokuにpythonで作ったdiscordボットを展開した

自分用、覚書、メモです。

基本


Heroku with Pythonチュートリアルをまずやる


Getting Started on Heroku with Python https://devcenter.heroku.com/articles/getting-started-with-python
をまずやる、Push local changesぐらいまでやった所で本題のdiscordボット展開をやり始めた


git init、heroku create


先程のチュートリアルで学んだことを基本に
「git clone」の代わりに既にローカルに用意してあるプロジェクトのディレクトリにいって「git init」
「heroku create」もしとく


pipenvを使い、Pipfileに依存関係


先程のチュートリアルではpipenvを使いPipfileで依存関係を記録していた、同じ様にやる
pipenvを使って、使用するパッケージをインストールする、「pipenv install discord」とかする
「Pipfile」ファイルに依存関係が記録されていくのを確認


Procfileを作成


さて、herokuでdiscordボットのやり方調べていくと、先程のチュートリアルでは「Procfile」には「web:」から始まる文字列を置いていたが
「woker:」を使うとの事。
「worker: python bot.py」って感じに書いた「Procfile」を作成。



ボットのトークンなどは環境変数で


ところで、これまでローカル環境でテストする時にコードに自分のDiscordボットのトークンをそのまま書いていたが、このままgit pushするとマズいっぽい
トークンがバレちゃうから…


Herokuの環境変数を設定する


環境変数を使えば良いみたい
「heroku config:set BOT_TOKEN="xxxxxx"」って感じで環境変数を設定出来る
または、自分の場合、Herokuのダッシュボード行って、目的のアプリ開いて、「Setting」開いて、「Config Vars」項目から環境変数を設定した


pythonで環境変数を取得


pythonで環境変数を取得するには「os.environ["BOT_TOKEN"]」って感じで取れる。
コードを修正、「BOT_TOKEN = os.environ["BOT_TOKEN"]」って感じにした、「import os」も最初に付け加えた


.envでローカルの環境変数を設定


環境変数を使ったコードになったので、ローカルでも環境変数を取得して動くようにする為に「.env」ファイルを作成しよう
ちなみに、Windowsで「.env」って名前のファイル作りたい時にはファイル名を「.env.」として確定すると作れる
「.env」の中身は「BOT_TOKEN=xxxxxx」って感じに書いといた


.gitignoreに記述をして、「.env」をgitの対象外にする


中にトークンが記述されている「.env」をgit pushしてしまうとトークンがバレちゃうので「.gitignore」ファイルを使って公開しないようにしよう
「.gitignore」を作成し、中身には「.env」と書けば良い(チュートリアルのプロジェクトが参考になる)
「.gitignore」に書かれたファイルやフォルダはgitの対象外になるのでgit add .してもインデックスに登録されない


gitの対象外にしたいファイルを既にgitに追加してしまっていたら、「git rm --cached [ファイル]」


既にgit add .とかをして「.env」をインデックスに追加してしまっている場合は、「git rm --cached .env」とやると「.env」がインデックスから消えるらしい
インデックスに追加されてると「.gitignore」に記述されていてもgitの対象になるとの事なので
「--cached」オプション付けていれば、ローカルのファイルは消えないので安心との事



herokuへ展開


ローカルで正しく動作するか確認


展開する前に、ローカルで正しく動作するか確認
「heroku local」をしてローカルで正しくbotが動作する事を確認


push


ローカルで正しく動作してたら、herokuにpushだな
git add .
git commit -m "first commit"
git push heroku master
という風にしてherokuに展開じゃー


heroku ps:scale worker=1


展開したら「heroku ps:scale worker=1」をして動かす、チュートリアルの時は「web」だったけど「worker」です

botが動作してるか確認する。

動いてたらこれでOKだな。



うまく動かない場合、コンソールで動作を確認


うまく動かない場合、コンソールで確認だ!

「heroku run python bot.py shell」という風にすればbot.pyの動作を確認出来る。
エラーが起きてれば確認して修正してpushだな
エラー起きてなかったら「Procfile」がミスってるとか、「heroku ps:scale worker=1」をしてない、とかだと思う。
「heroku ps」でworkerが動いてるか様子を確認じゃないかな、知らんけど



おわり


ざっと一通りやり終えた直後に、思い出しながら書いていったのでなんか手順の抜けとかあるかも

おわり

0 件のコメント:

コメントを投稿