アサトの実験blog

Pythonでの自動化とか、IT関連で興味のあるテーマについて色々実験する場所です

今日の実験 (heroku で python 自動起動)

さて、今日の実験ですが、

昨日までは、有料のサーバ環境から cron で pythonスクリプトを実行していたのですが、できれば無料の環境から自動で実行したい。。ということで 

heroku という PaaS 環境から pythhon スクリプトを実行する形に変えたいと思います。

 

とはいえ、私自身 heroku を使うのもほとんど初めて。数日前に herokuでの python アプリ実行のチュートリアルを行ったばかりです。

 

で、わからないままに チュートリアルでの経験を踏まえつつ、アプリの自動実行の記事を参照して試してみました。参考にしたのはこちらの記事。

www.stockdog.work

 

本当に先人の方が色々やってくださっているので助かります。 herokuも pipenvもあまりわかってなかったのですがブログで先人たちの記事をみつつ、チュートリアルも参照することでなんとかうまく実行するまで持っていけました。

基本的には、上の記事を見ながらやったんですが、上の記事で省略されていることも若干あって少し悩みました。が、最終的にはなんとか終了。

 

私が初心者だけに悩んだ部分が

---------------------------------------------

#適当に用意してください
runtime.txt
requirements.txt

----------------------------------------------

と書かれていた部分。他の記事を見て&エラー&チュートリアルをみて、herokuへpythonアプリのデプロイには、requirements.txt もしくは Pipfile というものが必要だとしり、Pipfileってなーに? 状態の私はそこから調査(すんません本当に初心者です w)

 

参考にさせていただいたのが、このサイト

qiita.com

なんか 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 設定。これ結構面倒だなーと思って記事を調べたら、いい情報がありました。この記事。

qiita.com

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スクリプトはいつでも実行できる環境が整ったのでまた色々なことを試していきたいと思います。

 

 

このブログ(何を実験しているか?)について

えー。一応わたくし SEでして、最近は Pythonを学習中です。


Pythonでいろんなことを自動でやる。。というのを実験中です。

今何を試しているか?というと、

 

1) Pythonでの記事の自動投稿。

 をやってます。参考にさせていただいた(というか、メイン部分はほとんど真似をさせていただきました)のは次のページ。 tadaken3さん、ありがとうございます。

tadaken3.hatenablog.jp

 

で、記事本体の取得も何か面白いことできないかなーとまだ考え中ですが、とりあえずこちらの記事を参考にさせていただきました。

algorithm.joho.info

 

皆さんすごいです。色々試されていて大変参考になります。

両方を参考にして、Yahooのトップニュースの記事の一番目とか、あとは financialページの最初の記事とかをとってきて一日一回書き込みする。。というのを試しに自動化してみています。

 

ブログを毎日更新するってそれだけで結構大変なので、自分で書き込みをしないときに自動で何か面白い記事をかけたらいいなぁ。。と思ってるんですがさすがに記事を引っ張ってきて更新する「だけ」だと面白くはないので、何かもっと工夫ができたらなーと思ってます。

 

今は自動更新を サーバから cron の仕組みで定時実行していますが、次にはこれを heroku の無料枠内でできるように移行したいと思ってます。