さて、今日の実験ですが、
昨日までは、有料のサーバ環境から cron で python のスクリプトを実行していたのですが、できれば無料の環境から自動で実行したい。。ということで
heroku という PaaS 環境から pythhon スクリプトを実行する形に変えたいと思います。
とはいえ、私自身 heroku を使うのもほとんど初めて。数日前に herokuでの python アプリ実行のチュートリアルを行ったばかりです。
で、わからないままに チュートリアルでの経験を踏まえつつ、アプリの自動実行の記事を参照して試してみました。参考にしたのはこちらの記事。
本当に先人の方が色々やってくださっているので助かります。 herokuも pipenvもあまりわかってなかったのですがブログで先人たちの記事をみつつ、チュートリアルも参照することでなんとかうまく実行するまで持っていけました。
基本的には、上の記事を見ながらやったんですが、上の記事で省略されていることも若干あって少し悩みました。が、最終的にはなんとか終了。
私が初心者だけに悩んだ部分が
---------------------------------------------
#適当に用意してください
runtime.txt
requirements.txt
----------------------------------------------
と書かれていた部分。他の記事を見て&エラー&チュートリアルをみて、herokuへpythonアプリのデプロイには、requirements.txt もしくは Pipfile というものが必要だとしり、Pipfileってなーに? 状態の私はそこから調査(すんません本当に初心者です w)
参考にさせていただいたのが、このサイト
なんか pipenvというコマンドを使って仮想環境をつくれば、自動的に Pipfileというのを作ってくれるらしい。一応 SE経験が長いので、あーなるほど。これで環境作って必要なパッケージとかインストールしていけば、Pipfile状に必要な情報が書かれていくから、これを heroku環境にアップロードすれば、これをもとに heroku上のアプリ環境をビルドしてくれるんだなー。。という想像はついたので、さっそく実行。
# pip install pipenv で pipenv をインストール。
# pipenv --python 3.6 で仮想環境作成(使っている環境が python 3.6なので)
# pipenv install beautifulsoup4 requests htmlparser apscheduler
↑ 必要なパッケージを 仮想環境上にインストール
# pipenv shell
# python hatenapost.py ← 実行確認。
で、うまくいったことを確認すれば、ビルド用の Pipfileもできているので、あとは元の記事の手順にそって、herokuへ git で push します。
ここでもちょっと悩んだのが、git push 時の remote 設定。これ結構面倒だなーと思って記事を調べたら、いい情報がありました。この記事。
heroku git:remote --app APPNAME
とすれば、リモートリポジトリ heroku が登録されるとのこと。
なので最初の記事の
heroku create hatenapost0904
で、自動実行は、そのまま timeclock.pyを真似させていただいて実行するスクリプトのみ自分のスクリプトに変更。あとは実行インターバルを自分が定期的に実行したい時間をもとに設定し直します。(実際は最初は1分で実行確認した後に修正)で、
git init
git add .
git commit -m "first commit"
のあとに、
heroku git:remote --app APPNAME
とやってから、
git push heroku master
とやることで
Pipfile も含めて heroku 環境に pushができ、ビルドが成功しました。うまくデプロイされた時の heroku logs は
2018-09-04T15:43:22.754944+00:00 app[api]: Release v1 created by user asa418@nifty.com
2018-09-04T15:43:24.214869+00:00 app[api]: Enable Logplex by user asa418@nifty.com
2018-09-04T15:43:24.214869+00:00 app[api]: Release v2 created by user asa418@nifty.com
2018-09-04T15:45:07.000000+00:00 app[api]: Build started by user asa418@nifty.com
2018-09-04T15:45:45.627634+00:00 app[api]: Deploy 536b8f98 by user asa418@nifty.com
2018-09-04T15:45:45.627634+00:00 app[api]: Release v3 created by user asa418@nifty.com
2018-09-04T15:45:54.000000+00:00 app[api]: Build succeeded
って感じになります。
さて、これで pythonスクリプトはいつでも実行できる環境が整ったのでまた色々なことを試していきたいと思います。