(1)jp.heroku.comに移動し、新規登録ボタンをクリックします
(2)登録情報を入力し、無料アカウント作成ボタンをクリックします
(3)メールが送信されたことを示す画面が表示されます
(4)登録したメールアドレスにメールが届いているので確認します
(5)メールのURLをクリックします
(6)パスワードの設定画面が表示されるので、入力し、パスワードを設定しログインするボタンをクリックします
(7)完了画面が表示されるので、ここをクリックして次に進んでくださいボタンをクリックします
(8)ユーザ登録が完了し、HEROKU画面が表示されます
(1)トップ画面からダッシュボードをクリックします
(2)Newボタンをクリックし、Create New Appボタンをクリックします。
(3)作成したいアプリ名を入力し、Create Appボタンをクリックします アプリ名はHeroku全体で一意であることが必要になりますので、他のアプリとは重複しない名前にします
(4)ダッシュボードに作成したアプリ名が表示すれば、アプリ作成は完了です
(5)Windowsで空のフォルダを作成します
(6)コマンドプロンプトを開いて、作成したディレクトリへ移動します
(7)herokuへのログインします
(8)git cloneコマンドの実行します
(9)完了後
(10)作成したフォルダにプロジェクトが追加されます
(1)コマンドプロンプトを開いて、プロジェクトのディレクトリへ移動します
(2)アセットプリコンパイルを実行する(※ 実行しないとCSSが反映されていなかった)
(3)git add .コマンドを入力し、変更情報を追加します
(4)git commitコマンドを入力し、コミット処理を行います
(5)git push heroku masterコマンドを入力します
(6)Herokuへの資産反映完了
(7)RAILSのDB反映処理を行います
heroku run rails db:migrate
heroku run rails db:fixtures:load
(8)アプリケーションを起動し、処理を確認します(ブラウザから直接URLを入力しても可)
heroku open
(1)git pullコマンドを入力し、変更情報を取り込みます
$ git pull heroku master
(1)ログの確認方法
$ heroku logs --tail
(1)Herokuにログインします
$ heroku login --interactive
(2)データベースの情報を確認します
$ heroku pg:info -a (アプリ名)
(3)データベースをリセットします((2)で取得したAdd-on名を使用します)
$ heroku pg:reset postgresql-xxxxxxxxxxx --confirm (アプリ名)
(4)テーブルの再作成を行います
$ heroku run rails db:migrate
※無料枠が超えましたと連絡が来たとき(1週間以内に月9ドル以上の契約をしないと使えなくなるよという脅し)
heroku
The database DATABASE_URL on Heroku app (アプリ名) has exceeded its allocated storage capacity. Immediate action is required.
The database contains 13,718 rows, exceeding the Hobby-dev plan limit of 10,000. INSERT privileges to the database will be automatically revoked in 7 days. This will cause service failures in most applications dependent on this database.
To avoid a disruption to your service, migrate the database to a Hobby Basic ($9/month) or higher database plan:
https://hello.heroku.com/upgrade-postgres-c#upgrading-with-pg-copy
If you are unable to upgrade the database, you should reduce the number of records stored in it.
(1)Herokuにログインします
$ heroku login
(2)有料データベースを追加します
$ heroku addons:create heroku-postgresql:hobby-basic --app (アプリ名)
(3)データベースをコピーする前にメンテナンスモードを on にしてアプリを処理不可にします。
heroku maintenance:on -a (アプリ名)
(4)pg:copy を使って新しいデータベースにコピーをします。
heroku pg:copy DATABASE_URL HEROKU_POSTGRESQL_XXXXXX_URL -a (アプリ名) --confirm (アプリ名)
(5)データベースのコピーが終わったら新しいデータベースをアプリサーバの参照先に設定します。
heroku pg:promote HEROKU_POSTGRESQL_XXXXXX_URL -a (アプリ名)
(6)その後メンテナンスモードを off にして作業終了。
heroku maintenance:off -a (アプリ名)
(1)メンテナンスモード オン
heroku maintenance:on -a (アプリ名)
(2)メンテナンスモード オフ
heroku maintenance:off -a (アプリ名)
(3)メンテナンス中画面のカスタマイズ
メンテナンス用の画面を用意し、以下のコマンドで設定します
heroku config:set MAINTENANCE_PAGE_URL=用意したページのURL --app アプリ名
(1)以下のファイルを用意し、gitでherokuに配備します
1)Procfile ※最初のappがpythonプログラム名
web: gunicorn app:app --log-file=-
※最初のappがpythonプログラム名
2)requirements.txt ※pythonプログラムが使用するライブラリ
flask
gunicorn
numpy
pandas
scipy
seaborn
scikit-learn
※最初はバージョンを指定したが、herokuでエラーになったため全て削除した
3)app.py ※学習済モデルを使用して、結果を返すAPI
from joblib import dump, load
import flask
import numpy as np
# initialize our Flask application and pre-trained model
app = flask.Flask(__name__)
model = None
def load_model():
global model
print(" * Loading pre-trained model ...")
model = load("sample-model.pkl")
print(' * Loading end')
@app.route('/')
def index():
return 'Hello World!'
@app.route("/predict", methods=["POST"])
def predict():
model = load("sample-model.pkl")
response = {
"success": False,
"Content-Type": "application/json"
}
# ensure an feature was properly uploaded to our endpoint
if flask.request.method == "POST":
if flask.request.get_json().get("feature"):
# read feature from json
feature = flask.request.get_json().get("feature")
# preprocess for classification
# list -> np.ndarray
feature = np.array(feature).reshape((1, -1))
# classify the input feature
response["prediction"] = model.predict(feature).tolist()
# indicate that the request was a success
response["success"] = True
# return the data dictionary as a JSON response
return flask.jsonify(response)
if __name__ == "__main__":
load_model()
print(" * Flask starting server...")
app.run(host='0.0.0.0', port='8000')
4)train.py ※学習してモデルを保存(アヤメデータを学習)
from sklearn import svm
from sklearn import datasets
from joblib import dump, load
def main():
# classifier
clf = svm.SVC()
# data(iris)
iris = datasets.load_iris()
# Split train_x, train_y
X, y = iris.data, iris.target
# train
clf.fit(X, y)
# save model
dump(clf, 'sample-model.pkl')
if __name__ == '__main__':
main()
※当初はこのプログラムを実行して学習済モデルを保存しようとしたが、heroku上では 作成されたファイルは保存されないため、別のlinuxサーバーで学習済モデルを作成し、herokuに上記資産と一緒にgitでpushした