【エラー解説】python+Django+MecabをHerokuにデプロイ

【エラー解説】python+Django+MecabをHerokuにデプロイ

pythonで作成したwordcloudをダウンロードできるWebアプリをHerokuにデプロイしたときに苦戦したので、備忘録として載せておきます。
今後、誰かの役に立てばと思います。

はじめに

pythonのWebアプリをはじめて、Herokuにデプロイしてみました。
エラーが大量に発生したので、解説していきます。

Webアプリは、前回の記事で解説した、Twitterのタイムラインでwordcloudを作成するWebアプリです。

デプロイ方法について

基礎的な手順については、他サイトで解説されていますので、参照してください。

https://qiita.com/1-row/items/80f89c8ada2e61f04446

エラー解説

私がデプロイする際に発生したエラーについて、解説および回避方法を記載します。

requirements.txtについて

requirements.txtというファイルに必要なモジュールを羅列することで、herokuにデプロイする際に自動でモジュールをインストールしてくれます。

下記のコマンドを実行することで、ローカルで使用している関連モジュールの一覧をrequirements.txtに出力します。

pip freeze > requirements.txt

herokuでインストールできないモジュールがいくつかあります。
そのため、今回は一例として下記にエラーが発生したぐらい例を記載します。
エラーの回避方法も記載しています。

【エラー①】Could not find a version that satisfies the requirement mecab-python-windows==0.996

【エラー内容】
バージョンを満たすものが見つかりませんというエラーです。

Could not find a version that satisfies the requirement mecab-python-windows==0.996

【回避方法】
herokuでmecabは、使用できないモジュールのため代わりに、mecab-python3を使用します。

requirements.txt内のmecab-python-windows==0.996という記述を、書き換えます。

mccabe==0.6.1
mecab-python3==0.996.5
numpy==1.19.1
oauthlib==3.1.0
parso==0.7.1
pickleshare==0.7.5

※mecab-python3のバージョン1.0以上の場合、herokuでの自動インストール時に別のエラーが発生します。エラー②を確認。

【エラー②】error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

【エラー内容】
ディレクトリが存在しませんというエラーです。

error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

mecab-python3のバージョン1.0以上の場合、辞書ライブラリを別途インストールすることを求めるようになったことが起因するようです。

https://medium.com/@jiraffestaff/mecabrc-%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%A9%E3%83%BC-b3e278e9ed07

【回避方法】
requirements.txt内で1.0未満のバージョンを使用しましょう。

mccabe==0.6.1
mecab-python3==0.996.5
numpy==1.19.1
oauthlib==3.1.0
parso==0.7.1
pickleshare==0.7.5

【エラー③】OSError: cannot open resource

【エラー内容】
リソースが開けませんというエラーです。
この情報だけでは、どのリソースが必要かわかりませんが、私の場合、wordcloudを作成するときのフォントが存在しないことが原因でした。

OSError: cannot open resource

【回避方法】
指定するフォントをアップロードし、指定する。

私の場合、gitでherokuにデプロイしているため、gitにfontフォルダをコミットし、デプロイすることで解決しました。

※herokuでは、大文字小文字を判断しますので、Fontとfontは違うディレクトリと判断されるので注意しましょう。

以上が私の経験したエラー内容となります。
誰かのお役に立てたら、コメントいただけれると幸いです。

P.S.

【今回デプロイしたWebアプリ】

https://twiiterwordcloud.herokuapp.com/

Webアプリで作成できるwordcloud
キーワード:エンジニア