herokuでサービスを構築する方法
1. herokuのWebサイトでアカウントを登録する。
gmailのメールアドレスを使用して登録する場合
2. heroku CLIをインストールする
https://devcenter.heroku.com/articles/getting-started-with-python#set-up
3. ターミナルでherokuにログインする
$ heroku login
メールアドレスとパスワードを入力
4. herokuにアプリのリポジトリを作成する
以下のコマンドは、すべてgit bashで実行します。
ここではランダムなアプリ名(floating-sands-17593)が生成されますが、これは後で変更することができます。
$ heroku create
Creating app... done, floating-sands-17593 done, floating-sands-17593
https://floating-sands-17593.herokuapp.com/ | https://git.heroku.com/floating-sands-17593.git
GitHub上に自分のサーバーのリポジトリがあり、heroku上でリポジトリを実行したい場合、自分のリポジトリ下で以下のコマンドを実行し、herokuのリポジトリと関連付けると、git remote -vコマンドでherokuとoriginの二つのリポジトリを関連付けたことが表示されるようになります。
$ heroku git:remote --app floating-sands-17593
set git remote heroku to https://git.heroku.com/floating-sands-17593.git
$ git remote -v
heroku https://git.heroku.com/floating-sands-17593.git (fetch)
heroku https://git.heroku.com/floating-sands-17593.git (push)
origin [email protected]:xxxxxxx/myserver.git (fetch)
origin [email protected]:xxxxxxx/myserver.git (push)
その後、コードをオリジンリポジトリにコミットする際に、以下のコマンドを実行すれば、ローカルの heroku リポジトリの master ブランチにも変更をコミットすることができます。
$ git push origin HEAD:heroku/master
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/xxxxxxx/myserver
30b7661..3f8b4e2 HEAD -> heroku/master
次に、以下のコマンドを実行して、ローカル heroku リポジトリの mater ブランチからリモート heroku リポジトリの master ブランチにコードをコミットします。
$ git push heroku master
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 1.68 KiB | 1.68 MiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done. done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: ! The latest version of Python 3.6 is python-3.6.6 (you are using python-3.6.0, which is unsupported).
remote: ! We recommend upgrading by specifying the latest version (python-3.6.6).
remote: Learn More: https://devcenter.heroku.com/articles/python-runtimes
remote: -----> Installing python-3.6.0
remote: -----> Installing pip
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: Collecting requests>=2.12 (from -r /tmp/build_6c9b905b83df6633ae3bb4c4f833da04/requirements.txt (line 1))
remote: Downloading https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69c4c3fdf57a284257925dfc12bda/ requests-2.19.1-py2.py3-none-any.whl (91kB)
remote: Collecting certifi>=2017.4.17 (from requests>=2.12->-r /tmp/build_6c9b905b83df6633ae3bb4c4f833da04/requirements.txt ( line 1))
remote: Downloading https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee63644d83663b34c539f7a09aed18f9e/ certifi-2018.8.24-py2.py3-none-any.whl (147kB)
remote: Collecting urllib3<1.24,>=1.21.1 (from requests>=2.12->-r /tmp/build_6c9b905b83df6633ae3bb4c4f833da04/requirements. txt (line 1))
remote: downloading https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c53851ef4f56f62a3486e6a7d8ffb/ urllib3-1.23-py2.py3-none-any.whl (133kB)
remote: Collecting idna<2.8,>=2.5 (from requests>=2.12->-r /tmp/build_6c9b905b83df6633ae3bb4c4f833da04/requirements.txt ( line 1))
remote: Downloading https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna- 2.7-py2.py3-none-any.whl (58kB)
remote: Collecting chardet<3.1.0,>=3.0.2 (from requests>=2.12->-r /tmp/build_6c9b905b83df6633ae3bb4c4f833da04/requirements. txt (line 1))
remote: Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/ chardet-3.0.4-py2.py3-none-any.whl (133kB)
remote: Installing collected packages: certifi, urllib3, idna, chardet, requests
remote: Successfully installed certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1 urllib3-1.23
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 55.3M
remote: -----> Launching...
remote: Released v3
remote: https://floating-sands-17593.herokuapp.com/ deployed to Heroku
remote: Verifying deploy..:
remote: Verifying deploy... done. done.
To https://git.heroku.com/floating-sands-17593.git
* [new branch] master -> master
もちろん、コードを直接herokuのリポジトリに投稿して、自分で実験することも可能です。
5. heroku openコマンドを実行し、デプロイされたサイトを開きます。
6. データベースの設定、ここではpostgresqlの例を示します。
https://elements.heroku.com/addons/heroku-postgresql インストールをクリックして、自分のアプリケーションにデータベースを追加します。
postrgre の hobby-dev の最下位バージョンは、1万レコード未満、20コネクション、キャッシュなし、fork/followなし、Postgresログなしをサポートしており、低コストで始められるバージョンとなっています。
また、アプリ(appname)にhobby-dev版のpostgreデータベースを追加するには、コマンドを使用します。
heroku addons:add heroku-postgresql:hobby-dev --app appname
データベースを追加すると、データベースのURL(DATABASE_URL)が生成され、以下のコマンドで確認することができます。
heroku config -s --app appname
データベース情報を表示するコマンドです。
heroku pg:info --app appname
データベースとのセッションを確立するためのコマンドです。
heroku pg:psql --app appname, 接続を確立した後、sqlステートメントを入力することができます。
C:\Users\llz>heroku pg:psql --app floating-sands-17593
--> Connecting to postgresql-closed-48647
psql (10.5)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, key bits: 256, compression: off)
floating-sands-17593::DATABASE=>
floating-sands-17593::DATABASE=> CREATE TABLE posts ( content TEXT,
floating-sands-17593::DATABASE(> time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
floating-sands-17593::DATABASE(> id SERIAL );
CREATE TABLE
floating-sands-17593::DATABASE=>
floating-sands-17593::DATABASE=> insert into posts values('abc');
INSERT 0 1
floating-sands-17593::DATABASE=> commit;
WARNING: there is no transaction in progress
COMMIT
floating-sands-17593::DATABASE=> select * from posts;
content | time | id
---------+----------------------------+----
abc | 2018-09-16 16:21:36.222737 | 1
(1 row of records)
postgreデータベースをwindowで展開する手順
https://devcenter.heroku.com/articles/heroku-postgresql#set-up-postgres-on-windows
7. データベースを手に入れたら、今度はプログラムによってデータベースを呼び出します。
pipenv インストール psycopg2-binary
その後、pythonのコードに、追加します。
import os
import psycopg2
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
コードに加えて、さらに3つの重要なファイルがリポジトリに存在する必要があります。
(1) 要件.txt は、Pythonの依存モジュールを以下のフォーマットで保持します。
requests>=2.12
flask>=0.12.2
psycopg2>=2.7.5
bleach>1.5.0
(2) ランタイム.txt 実行環境設定
python-3.6.0
(3) プロファイル 実行されるpyファイル
web: python BookmarkServer.py
デバッグ方法
heroku logs --tail サーバー側のログを表示します。
一般的なエラーログ
1. r10 ブートタイムアウト
2018-09-16T14:44:19.344061+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2018-09-16T14:44:19.344061+00:00 heroku[web.1]: Stopping process with SIGKILL
2018-09-16T14:44:19.470277+00:00 heroku[web.1]: Process exited with status 137
2018-09-16T14:44:19.488826+00:00 heroku[web.1]: State changed from starting to crashed
2018-09-16T14:44:22.212756+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host= floating-sands-17593.herokuapp.com request_id=072c4c2c-2e86-4123-844b-d03bb5f00e36 fwd="223.72.44.189" dyno= connect= service = status=503 bytes= protocol=https
https://devcenter.heroku.com/articles/error-codes#r10-boot-timeout
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例