webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

herokuでrailsアプリからpythonスクリプトを呼ぶ方法

塗り絵ツクール2017 - Xnotepad というアプリを作ってみました。

webサーバはherokuで動かしていて、フレームワークRuby on Railsでなのですが、画像の処理部分をpythonでやりたかったので、その時やったことを書いておきます。

私は開発環境にcloud9を使っていて、そこからgit push heroku masterしています。

ローカルでも手順は同じです。

STEP1

herokuのコンソールでpython –versionとするとちゃんと動いていて、pythonと打つとpythonのコンソールが使えます。 ですがこれだけではpythonのバージョンやpipなどが使えないので、正式に使えるようにしておきます。

以下のコマンドでheroku側にpythonを使う準備をしておきます。

heroku buildpacks:add heroku/python

STEP2

次にローカルで使いたいパッケージなどをpipでインストールし、pythonのコードを書いておきます。 herokuでも同じパッケージを使うために、以下を実行します。

pip freeze > requirment.txt

上記コマンドを実行すると、ローカルに入っているパッケージの一覧がrequirement.txtに書き込まれます。

STEP3

Procfileを以下の内容で作成します。拡張子なしでファイル名をProcfileとしてください。

web: bin/rails server -p $PORT -e $RAILS_ENV

bin~ はheroku ps としたときに web (Free): の右に出ているやつです。

STEP4

あとは上記をコミットし、herokuへプッシュすればOKなのですが、

バージョンの違いなどからpip install時にこけることがあります。

解決策としては、

エラーメッセージにどのパッケージを入れることができないか表示されるので、バージョンを調べて合わせるか、私の場合は使っていないパッケージだったのでrequirement.txtから削除しました。

これでパッケージもインストールされ、railsからsystemメソッドなどでpythonスクリプトを呼ぶことができます。