Help us understand the problem. What is going on with this article?

【Python+heroku】Python入れてない状態からherokuで何か表示するまで(前編)

More than 3 years have passed since last update.

これはなに?

heroku入門系の記事で、
OSXでrubyでとかnode.jsでとかはよく見かけるんですけど
そうじゃない切り口で。

  • Pythonで
  • Win7で
  • herokuにアカウント登録はしている
  • (gitとはまだ仲良しじゃない)

こんなところからスタートしてみます。
ゴールとしては、アプリとかそういうとこまでは行きません。なんか表示するまで。

heroku公式のPython導入ドキュメント
https://devcenter.heroku.com/articles/getting-started-with-python
の体験メモでもあります(ただし自分の要りそうなとこだけつまみ食い)。


インストール

Pythonインストール

このへんからダウンロードしてきてインストールします。

https://www.python.org/downloads/

heroku02.png

ここでは、このとき2系で最新だった2.7.11を入れました。
(CG系だとメインツール内のPythonとバージョン揃えたりするのが良い気がしますが。
ここではそのへんは考えずに突貫。じゃ3系入れようよとあとで思いました)

PATHを通す

Windowsの環境変数のPATHに追加します。

C:\Python27;C:\Python27\Scripts;

実は今回、これやるのを途中まで忘れていて、途中から正常(?)にしました。
なので、途中までは、最初にこれをやってたら出なかったエラーとかも含まれてるかもしれません。含まれてないかもしれません。

コマンドで追加したい場合はsetxですね

> setx /?

SetX の使用法は 3 とおりあります:

構文 1:
    SETX [/S システム [/U [ドメイン\]ユーザー [/P [パスワード]]]] 変数 値 [/M]

構文 2:
    SETX [/S システム [/U [ドメイン\]ユーザー [/P [パスワード]]]]
    変数 /K レジストリパス [/M]

構文 3:
    SETX [/S システム [/U [ドメイン\]ユーザー [/P [パスワード]]]]
         /F ファイル {変数 {/A x,y | /R x,y 文字列}[/M] | /X} [/D 区切り文字]

説明:
    ユーザーまたはシステムの環境の中で環境変数を作成または
    変更します。引数、レジストリ キー、またはファイル入力を
    もとに変数を設定することができます。
(後略)

virtualenv

virtualenvが要るとおっしゃるのでいれます。

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> import pip
>>> pip.main(["list"])
pip (7.1.2)
setuptools (18.2)
0

>>> pip.main(["install","virtualenv"])
Collecting virtualenv
  Downloading virtualenv-13.1.2-py2.py3-none-any.whl (1.7MB)
    100% |################################| 1.7MB 271kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-13.1.2
0
>>>

普通にpip install virtualenvでもいいんですけど、
ここではPythonのpipモジュール経由で。

herokuインストール

heroku Toolbeltという、herokuとそれに関するツール一式を入れてくれるインストーラが用意されてます。

https://toolbelt.heroku.com/

中身は、gitとかrubyとか。
heroku01.png

↓こちらの場所にインストールされ、PATHに追加されます。

Technical details

The heroku client will be installed into C:\Program Files\Heroku and will be added to your %PATH%.

インストール時は、なんか最後のgitのとこでちょい待たされて ん? ってなりますがビビらなくていいです。

git

この時点でgitも入ってます。
確認してみます。気持ち的な問題で。

git -hします。

git-h
C:\Users\{user}>git -h
Unknown option: -h
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

ふむ。

getting-started

以下こちらに沿って進めます。

https://devcenter.heroku.com/articles/getting-started-with-python

> heroku

Toolbeltインストールした直後に
「一旦インストールすればherokuコマンドで使えるようになるよ!」
みたいなのが書いてあるんですが、
それをみてとにかく無邪気にherokuと実行。しました。

するとなにか初期化っぽいのが走って、
add dependencies とかなんとかかんとかで、ちょいと待たされます。待ちましょう。
なんかまずいことしたのかと思って動揺しました。
1分も待たないですけど。意外なとこで待たされるとそのたびにビビります。小者ゆえに

ちなみにこのときのログは、初期化が終わったあとウィンドウが自動で閉じてしまったので
ありません
(winキー > heroku で開いていたせい)

ログオン

heroku loginします
すると、herokuアカウントのメールアドレスとパスワードを訊かれます。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\{user}>heroku login
Enter your Heroku credentials.
Email: aiueo@gmail.com
Password (typing will be hidden):
Logged in as aiueo@gmail.com

はいれた。っぽい。

バージョン確認

heroku version

C:\Users\{user}>heroku version
heroku/toolbelt/3.42.29 (i386-mingw32) ruby/2.1.7
heroku-cli/4.27.13-9dddf39 (386-windows) go1.5.3
=== Installed Plugins
heroku-apps@1.1.3
heroku-cli-addons@0.1.1
heroku-fork@4.0.0
heroku-git@2.4.4
heroku-local@4.1.5
heroku-run@2.9.2
heroku-spaces@2.0.9
heroku-status@1.2.4

こちら(▼)も読みながら進めていて、

http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku

そこの【2】に書いてあった内容です。

テストアプリケーションの場所準備

適当に今回の作業場にしたいフォルダを作って移動します。

C:\Users\{user}>cd C:\Users\{user}\Documents\path\to\heroku_proj

C:\Users\{user}\Documents\path\to\heroku_proj>mkdir testapp

C:\Users\{user}\Documents\path\to\heroku_proj>cd testapp

C:\Users\{user}\Documents\path\to\heroku_proj\testapp>

herokuのPythonサンプルをもらってくる

githubで公開されているpython-getting-startedっていうのをもらってきます。
git clone https://github.com/heroku/python-getting-started.gitします

C:\Users\{user}\Documents\path\to\heroku_proj\testapp>git clone https://github.com/heroku/python-getting-started.git
Cloning into 'python-getting-started'...
remote: Counting objects: 204, done.
emote: Total 204 (delta 0), reused 0 (delta 0), pack-reused 204Receiving objects
Receiving objects:  75% (153/204)
Receiving objects: 100% (204/204), 32.17 KiB | 0 bytes/s, done.
Resolving deltas: 100% (91/91), done.
Checking connectivity... done.

で、cdで移動

C:\Users\{user}\Documents\path\to\heroku_proj\testapp>cd python-getting-started

C:\Users\{user}\Documents\path\to\heroku_proj\testapp\python-getting-started>

以降は、すべてのコマンドはC:\Users\{user}\Documents\path\to\heroku_proj\testapp\python-getting-started>から実行したものとご了解ください。

herokuアプリをクリエイト

イマココ

https://devcenter.heroku.com/articles/getting-started-with-python#deploy-the-app

heroku createせよ、とのこと。

>heroku create

Creating app... done, stack is cedar-14
https://ancient-taiga-0000.herokuapp.com/ | https://git.heroku.com/ancient-taiga-0000.git

ancient-taiga-0000ってなんすか?
突然の厨二用語ですか?
って思うわけですが、createするときに名前決めなかったら自動で名前つけてくれるみたいです。
まあテストだからいいか。

もしちゃんと名前つけるならば
heroku create your-app-name
このように。
もしくは、ブラウザ経由でherokuにログインして、そこから変えることもできるっぽい(やってない)

デプロイ

ここで突然のgit体験です。

git push heroku master

1-2分くらいかかります。

>git push heroku master
Counting objects: 204, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (98/98), done.
Writing objects: 100% (204/204), 32.16 KiB | 0 bytes/s, done.
Total 204 (delta 91), reused 204 (delta 91)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing runtime (python-2.7.11)
remote: -----> Installing dependencies with pip
remote:        Collecting dj-database-url==0.3.0 (from -r requirements.txt (line 1))
remote:        Downloading dj_database_url-0.3.0-py2.py3-none-any.whl
remote:        Collecting Django==1.9.1 (from -r requirements.txt (line 2))
remote:        Downloading Django-1.9.1-py2.py3-none-any.whl (6.6MB)
remote:        Collecting gunicorn==19.4.5 (from -r requirements.txt (line 3))
remote:        Downloading gunicorn-19.4.5-py2.py3-none-any.whl (112kB)
remote:        Collecting psycopg2==2.6.1 (from -r requirements.txt (line 4))
remote:        Downloading psycopg2-2.6.1.tar.gz (371kB)
remote:        Collecting whitenoise==2.0.6 (from -r requirements.txt (line 5))
remote:        Downloading whitenoise-2.0.6-py2.py3-none-any.whl
remote:        Installing collected packages: dj-database-url, Django, gunicorn, psycopg2, whitenoise
remote:        Running setup.py install for psycopg2
remote:        Successfully installed Django-1.9.1 dj-database-url-0.3.0 gunicorn-19.4.5 psycopg2-2.6.1 whitenoise-2.0.6
remote:
remote: -----> Preparing static assets
remote:        Running collectstatic...
remote:        Post-processed 'admin/js/vendor/xregexp/LICENSE-XREGEXP.txt' as 'admin/js/vendor/xregexp/LICENSE-XREGEXP.d64cecf4f157.txt'
(中略)
remote:        Post-processed 'lang-logo.png' as 'lang-logo.019c8743b7cf.png'
remote:        58 static files copied to '/app/staticfiles', 58 post-processed.
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing... done, 42.1MB
remote: -----> Launching...
remote:        Released v4
remote:        https://ancient-taiga-0000.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/ancient-taiga-0000.git
 * [new branch]      master -> master

>

python-getting-startedの中にはrequirements.txtが置かれてるわけですが、
上記処理中、それが読まれてpipでインストールされてます。

続けて、heroku ps:scale web=1 せよ とのこと。

>heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free.

からの
heroku open

>heroku open
Opening ancient-taiga-0000... done

すると、ブラウザが立ち上がって、アプリ(ここではancient-taiga-0000.herokuapp.com)が開かれます。

へー。


ここまでで、

  • 下準備
  • heroku appを作る
  • heroku上にデプロイして動かす

…を体験できました


ログを見る

イマココ

https://devcenter.heroku.com/articles/getting-started-with-python#view-logs

heroku logs --tail

--tailをつけると、リアルタイムでログどんどん取得されます。停めるときはCtl + C

>heroku logs --tail
2016-01-17T13:37:24.947150+00:00 heroku[api]: Enable Logplex by aiueo@gmail.com
2016-01-17T13:37:24.947150+00:00 heroku[api]: Release v2 created by aiueo@gmail.com
2016-01-17T13:40:12.180138+00:00 heroku[api]: Attach DATABASE resource by aiueo@gmail.com
2016-01-17T13:40:12.180177+00:00 heroku[api]: Release v3 created by aiueo@gmail.com
2016-01-17T13:40:12.470201+00:00 heroku[api]: Scale to web=1 by aiueo@gmail.com
2016-01-17T13:40:12.529336+00:00 heroku[api]: Deploy fe7f948 by aiueo@gmail.com
2016-01-17T13:40:12.529336+00:00 heroku[api]: Release v4 created by aiueo@gmail.com
2016-01-17T13:40:12.842955+00:00 heroku[slug-compiler]: Slug compilation started
2016-01-17T13:40:12.842964+00:00 heroku[slug-compiler]: Slug compilation finished
2016-01-17T13:40:15.096972+00:00 heroku[web.1]: Starting process with command `gunicorn gettingstarted.wsgi --log-file -`
2016-01-17T13:40:16.642246+00:00 app[web.1]: [2016-01-17 13:40:16 +0000] [3] [INFO] Listening at: http://0.0.0.0:10178 (3)
2016-01-17T13:40:16.642313+00:00 app[web.1]: [2016-01-17 13:40:16 +0000] [3] [INFO] Using worker: sync
2016-01-17T13:40:16.640646+00:00 app[web.1]: [2016-01-17 13:40:16 +0000] [3] [INFO] Starting gunicorn 19.4.5
2016-01-17T13:40:16.645613+00:00 app[web.1]: [2016-01-17 13:40:16 +0000] [9] [INFO] Booting worker with pid: 9
2016-01-17T13:40:16.684880+00:00 app[web.1]: [2016-01-17 13:40:16 +0000] [10] [INFO] Booting worker with pid: 10
2016-01-17T13:40:17.171330+00:00 heroku[web.1]: State changed from starting to up
(ry
2016-01-17T13:45:25.167623+00:00 app[web.1]: Not Found: /favicon.ico

ctl + c で停めようとすると下記のように確認されます

 !    Command cancelled.
バッチ ジョブを終了しますか (Y/N)? y

>

Procfile

イマココ

https://devcenter.heroku.com/articles/getting-started-with-python#define-a-procfile

git cloneしてきた「getting-started-with-python」の直下に置かれている
Procfileファイルについてみたいです。

github上だと、これ

https://github.com/heroku/python-getting-started/blob/master/Procfile

初期状態だと中身はこう
web: gunicorn gettingstarted.wsgi --log-file -

herokuに自動処理させたい時とかにclock: ~~っていうのを書いたりするみたいで、
そういう設定を書くファイルということですね。

ps

イマココ

https://devcenter.heroku.com/articles/getting-started-with-python#scale-the-app

heroku ps してみろ、とのこと。

>heroku ps
=== web (Free): gunicorn gettingstarted.wsgi --log-file -
web.1: up 2016/01/17 22:40:17 (~ 18m ago)

>

heroku run ~~

heroku run ~~ でなんか実行できるらしい

>heroku run
 !    Usage: heroku run COMMAND
 !
 !    Example: heroku run bash

>

runの後ろになんか要る。。。
そういえばheroku作業始めてからヘルプしたことなかったので、ここでやってみる。

>heroku -h
Usage: heroku COMMAND [--app APP] [command-specific-options]

Primary help topics, type "heroku help TOPIC" for more details:

  addons    #  manage add-on resources
  apps      #  manage apps (create, destroy)
  auth      #  authentication (login, logout)
  config    #  manage app config vars
  domains   #  manage domains
  logs      #  display logs for an app
  ps        #  manage dynos (dynos, workers)
  releases  #  manage app releases
  run       #  run one-off commands (console, rake)
  sharing   #  manage collaborators on an app

Additional topics:

  2fa          #  manage two-factor authentication settings
  buildpacks   #  manage the buildpack for an app
  certs        #  manage ssl endpoints for an app
  drains       #  display drains for an app
  features     #  manage optional features
  fork         #  clone an existing app
  git          #  manage local git repository for app
  help         #  list commands and display help
  keys         #  manage authentication keys
  labs         #  manage optional features
  local        #  run heroku app locally
  login        #  Login with your Heroku credentials.
  maintenance  #  manage maintenance mode for an app
  members      #  manage membership in organization accounts
  orgs         #  manage organization accounts
  pg           #  manage heroku-postgresql databases
  pgbackups    #  manage backups of heroku postgresql databases
  plugins      #  manage plugins to the heroku gem
  regions      #  list available regions
  spaces       #  manage heroku private spaces
  stack        #  manage the stack for an app
  status       #  Status of Heroku Platform
  twofactor    #  manage two-factor authentication settings
  update       #  update the heroku client
  version      #  display version

herokuアプリの情報を確認

自分のアプリを一覧
heroku apps

>heroku apps
=== My Apps
ancient-taiga-0000

もちろん現状は一つしかないわけです

heroku apps:info

>heroku apps:info
=== ancient-taiga-0000
Addons:        heroku-postgresql:hobby-dev
Dynos:         web: 1
Git URL:       git@heroku.com:ancient-taiga-0000.git
Owner:         aiueo@gmail.com
Region:        us
Repo Size:     36 kB
Slug Size:     42 MB
Stack:         cedar-14
Web URL:       https://ancient-taiga-0000.herokuapp.com/

どんなアドオン使ってるかとか、アクセス用のURLとかが確認できます。
そういえばRegion(地域)が usになってますね。

プラグイン確認

heroku plugins

>heroku plugins
=== Installed Plugins
heroku-apps@1.1.3
heroku-cli-addons@0.1.1
heroku-fork@4.0.0
heroku-git@2.4.4
heroku-local@4.1.5
heroku-run@2.9.2
heroku-spaces@2.0.9
heroku-status@1.2.4

アドオン確認

heroku addons

>heroku addons

Add-on                                           Plan       Price
───────────────────────────────────────────────  ─────────  ──
───
heroku-postgresql (postgresql-dimensional-7392)  hobby-dev  free
 └─ as DATABASE

The table above shows add-ons and the attachments to the current app (ancient-taiga-0000) or other apps.

当該アドオンのページを開く

>heroku addons:open heroku-postgresql
Opening heroku-postgresql (postgresql-dimensional-7392) for ancient-taiga-0000... done

するとここが開かれました↓

https://postgres.heroku.com/databases

resource12394017@heroku.com does not exist or cannot be accessed by this account 

そうですか。

addonとアカウントのverify

ちなみに、アドオンによってはアカウントをベリファイしてないとインストールさせてくれません。
要するに支払情報(クレジットカード)を登録しておくれよ
ということのようです。

※参考:
Unfiltered + HerokuでTwitter ToDoサービスを作る(heroku Add-onと設定ファイルとScalate使ってみる編) @ 冥冥乃志
http://mao-instantlife.hatenablog.com/entry/20120310/1331388396

支払い情報登録をさぼってアドオン入れようとするとこういう態度を取られます。
verify.png

くっそー分かってたよ!

リリース情報

heroku releases

>heroku releases
=== ancient-taiga-0000 Releases
v4  Deploy fe7f948            aiueo@gmail.com  2016/01/17 22:40:12 (~ 2h ago)
v3  Attach DATABASE resource  aiueo@gmail.com  2016/01/17 22:40:12 (~ 2h ago)
v2  Enable Logplex            aiueo@gmail.com  2016/01/17 22:37:24 (~ 2h ago)
v1  Initial release           aiueo@gmail.com  2016/01/17 22:37:24 (~ 2h ago)

環境設定を見る

heroku config

>heroku config
=== ancient-taiga-0000 Config Vars
DATABASE_URL: postgres://abcdefghijklmn:GaEMJZBYWhqmI9xXOOudegwpxf@ec2-54-83-61-45.compute-1.amazonaws.com:5432/d7vc7kpol1v9vn

長くなったので一旦これにて。
後半書けたらリンク貼ります > 後半書きました

http://qiita.com/it_ks/items/ca6c7f6e8fc89e49e46d

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした