#contents ** 概要 [#t74fcab8] - Herokuとはなにか? -- アプリケーションを稼働させるためのプラットフォーム -- PaaS (Platform as a Service) -- 公式サイト: https://www.heroku.com/ - サポート言語 (2017年8月現在) -- Node.js / Ruby / Java / PHP / Python / Go / Scala / Clojure - 前提条件 / 知識 -- Heroku無償アカウント登録済み -- Ruby on Rails / Ruby -- Unixコマンド / Vim -- Git -- PostgreSQL - ローカル開発環境 -- OS X 10.11 El Capitan -- VirtualBox 5.0.20 -- Vagrant 1.9.7 -- Ubuntu 16.04 (LTS) -- Git 2.7.4 -- Ruby 2.4.1 -- Rails 5.1.3 -- PostgreSQL 9.6.3 ** ローカル開発環境の構築 [#z2e0b481] *** Vagrant初期設定 [#o1b0eb27] - Ubuntu 16.04 (64bit) のbox (テンプレート) を追加 $ vagrant box add Ubuntu16.04 https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box - Vagrant用ディレクトリ作成 $ mkdir heroku_lessons $ cd heroku_lessons - Vagrantの初期化 $ vagrant init Ubuntu16.04 - ネットワークアダプター設定 $ vi Vagrantfile -------------------- config.vm.network "private_network", ip: "192.168.78.90" -------------------- - Vagrant起動 $ vagrant up - SSH接続確認 $ vagrant ssh - apt-getアップデート $ sudo apt-get update *** Gitインストール [#lecd194a] - gitインストール $ sudo apt-get install git $ git --version git version 2.7.4 - git初期設定 (Global) $ git config --global user.name "Yuji Shimojo" $ git config --global user.email "y.shimojo@example.com" $ git config --global color.ui true *** Rubyインストール [#z81b25ce] - 事前に必要なパッケージをインストール $ sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libpq-dev libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev // - ruby-build / ruby-devインストール // // $ sudo apt-get install -y ruby-build ruby-dev - rbenvインストール $ git clone https://github.com/rbenv/rbenv.git ~/.rbenv - rbenv初期化 $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ exec $SHELL - ruby-buildインストール $ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build $ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc $ exec $SHELL - 確認 $ echo "${PATH}" /home/ubuntu/.rbenv/plugins/ruby-build/bin:/home/ubuntu/.rbenv/shims:/home/ubuntu/.rbenv/bin:/home/ubuntu/.rbenv/shims:/home/ubuntu/.rbenv/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin - インストール可能なRubyバージョン一覧表示 $ rbenv install --list - 最新安定板のCRuby (2.4.1) インストール $ sudo rbenv install 2.4.1 - Rubyの構成をアクティベート $ sudo rbenv global 2.4.1 - システムで使用しているrbenvバージョン確認 $ rbenv global 2.4.1 - 各バージョン確認 $ rbenv version 2.4.1 (set by /home/ubuntu/.rbenv/version) $ ruby --version ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] $ gem --version 2.6.11 - Gem構成の確認 $ gem env RubyGems Environment: - RUBYGEMS VERSION: 2.6.11 - RUBY VERSION: 2.4.1 (2017-03-22 patchlevel 111) [x86_64-linux] - INSTALLATION DIRECTORY: /home/ubuntu/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0 - USER INSTALLATION DIRECTORY: /home/ubuntu/.gem/ruby/2.4.0 - RUBY EXECUTABLE: /home/ubuntu/.rbenv/versions/2.4.1/bin/ruby - EXECUTABLE DIRECTORY: /home/ubuntu/.rbenv/versions/2.4.1/bin - SPEC CACHE DIRECTORY: /home/ubuntu/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /home/ubuntu/.rbenv/versions/2.4.1/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /home/ubuntu/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0 - /home/ubuntu/.gem/ruby/2.4.0 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - "install" => "--no-rdoc --no-ri" - "update" => "--no-rdoc --no-ri" - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /home/ubuntu/.rbenv/versions/2.4.1/bin - /home/ubuntu/.rbenv/libexec - /home/ubuntu/.rbenv/plugins/ruby-build/bin - /home/ubuntu/bin - /home/ubuntu/.local/bin - /home/ubuntu/.rbenv/plugins/ruby-build/bin - /home/ubuntu/.rbenv/shims - /home/ubuntu/.rbenv/bin - /usr/local/sbin - /usr/local/bin - /usr/sbin - /usr/bin - /sbin - /bin - /usr/games - /usr/local/games - /snap/bin - rbenvをリハッシュ $ rbenv rehash - rbenvリハッシュの自動化 (rbenv-rehash gemのインストール) $ sudo gem i rbenv-rehash *** Ruby on Railsインストール [#x5bb7495] - 依存解決のためのNode.jsをインストール $ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - $ sudo apt-get install -y nodejs - gemが自動生成するri docドキュメントの無効化 $ echo 'install: --no-rdoc --no-ri' >> ~/.gemrc $ echo 'update: --no-rdoc --no-ri' >> ~/.gemrc - インストール可能なRailsバージョン一覧表示 $ gem query -ra -n "^rails$" - 最新版のRails 5.1.3をインストール $ sudo gem install rails -v 5.1.3 - Railsバージョン確認 $ rails -v Rails 5.1.3 *** PostgreSQLインストール [#u37e62d3] - 公式リポジトリ追加 $ sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list" $ wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - $ sudo apt-get update - 最新版のPostgreSQL 9.6インストール $ sudo apt-get install -y postgresql-common $ sudo apt-get install -y postgresql-9.6 libpq-dev - PostgreSQLバージョン確認 $ psql --version psql (PostgreSQL) 9.6.3 - DB接続確認 &color(red){※}; エラー発生 $ psql -l psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? - Postgres設定ファイル編集 $ sudo vi /etc/postgresql/9.6/main/postgresql.conf listen_addresses = 'localhost' - DBユーザー作成 $ sudo -u postgres createuser ubuntu -s $ sudo systemctl restart postgresql $ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres ** PaaS (Heroku) の仕組みを知ろう [#m15462e6] - IaaS -- Local Env: Ruby/Rails, Database, Web Server, Source Code -- Server: Ruby/Rails, Database, Web Server, Source Code, Analytics, Logging - Heroku (PaaS) -- Source Code -- Dependencies: ライブラリの依存関係を示したファイル (RubyのGemfile, Node.jsのpackage.json等) -- Procfile: Heroku上で動かしたいコマンド一覧 -- Slug: Source CodeとDependenciesをまとめたファイル -- Dyno: Linuxコンテナ (Slugを読み込んで稼働, 容易に起動/破棄/スケールアウトが可能) -- Addon: 本番環境に必要なツールを提供 (Addon:Logging, Addon:Mail, Addon:Analytics等) - Herokuの制約 -- Dyno上のディスク領域は揮発性のため永続データはAddon:Databaseや外部のストレージサービス利用が必要 -- Slugにもサイズ制限があるためJS, CSS, Images等は外部ストレージに保存する必要あり -- 基本機能の利用は無料だがDynoにアクセスが一定期間無いとスリープになり次回アクセス時に起動に数秒掛かる ** Heroku CLIインストール [#p95dd0ee] - Debian/Ubuntu用の公式インストールシェルスクリプトをダウンロード&実行 $ wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh - Herokuバージョン確認 $ heroku --version heroku-cli/6.13.7 (linux-x64) node-v8.2.1 - &color(red){※}; OS X (Elcapitan) 上にインストールする場合は以下参照 - Homebrewアップデート $ brew upgrade $ brew update - Heroku (Heroku CLI) インストール $ brew install heroku - Herokuバージョン確認 $ heroku --version heroku-cli/6.13.7 (darwin-x64) node-v8.2.1 - 秘密鍵/公開鍵作成 $ ssh-keygen -t rsa -C y.shimojo@example.com Generating public/private rsa key pair. Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): /home/ubuntu/.ssh/id_heroku_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_heroku_rsa. Your public key has been saved in /home/ubuntu/.ssh/id_heroku_rsa.pub. - Herokuアカウントとの紐付け (heroku login) $ heroku login Enter your Heroku credentials: Email: y.shimojo@example.com Password: ******** Logged in as y.shimojo@example.com - 公開鍵の登録 (アップロード) $ heroku keys:add /home/ubuntu/.ssh/id_heroku_rsa.pub Uploading /home/ubuntu/.ssh/id_heroku_rsa.pub SSH key... done ** Railsアプリケーションを作ろう [#sa73c6ca] - rails newでmymemoアプリ作成 (postgres使用) $ rails new mymemo -d postgresql - Gemfile編集 $ cd mymemo $ vi Gemfile gem 'therubyracer', platforms: :ruby - Rails Server起動 &color(red){※}; エラー発生 $ rails s Could not find gem 'therubyracer' in any of the gem sources listed in your Gemfile. Run `bundle install` to install missing gems. - Bundlerをインストール &color(red){※}; --no-document オプション無しの場合はRDocもインストール $ sudo gem install bundler --no-document - Gemの依存性解決 (bundle install) $ bundle install - Rails Server起動 (再実行) $ rails s => Booting Puma => Rails 5.0.5 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.9.1 (ruby 2.3.1-p112), codename: Private Caller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop - ブラウザ経由で 192.168.78.90:3000 へ接続しRailsのデフォルトページが表示されることを確認 - Scaffoldを使ってRailsアプリ作成 &color(red){※}; エラー発生 $ rails g scaffold Memo title:string body:text - 解決方法 $ sudo rbenv exec gem install bundler $ rbenv rehash $ bundle config build.nokogiri --with-xml2-config=/usr/local/opt/libxml2/bin/xml2-config --with-xslt-config=/usr/local/opt/libxslt/bin/xslt-config $ bundle config build.mini_portile2 --use-system-libraries $ bundle install $ rbenv rehash - Scaffold再実行 $ rails g scaffold Memo title:string body:text Running via Spring preloader in process 13342 invoke active_record create db/migrate/20170806093511_create_memos.rb create app/models/memo.rb invoke test_unit create test/models/memo_test.rb create test/fixtures/memos.yml invoke resource_route route resources :memos invoke scaffold_controller create app/controllers/memos_controller.rb invoke erb create app/views/memos create app/views/memos/index.html.erb create app/views/memos/edit.html.erb create app/views/memos/show.html.erb create app/views/memos/new.html.erb create app/views/memos/_form.html.erb invoke test_unit create test/controllers/memos_controller_test.rb invoke helper create app/helpers/memos_helper.rb invoke test_unit invoke jbuilder create app/views/memos/index.json.jbuilder create app/views/memos/show.json.jbuilder create app/views/memos/_memo.json.jbuilder invoke test_unit create test/system/memos_test.rb invoke assets invoke coffee create app/assets/javascripts/memos.coffee invoke scss create app/assets/stylesheets/memos.scss invoke scss create app/assets/stylesheets/scaffolds.scss - データベース作成 $ bundle exec rake db:create Created database 'mymemo_development' Created database 'mymemo_test' - テーブル作成 $ bundle exec rake db:migrate == 20170806093511 CreateMemos: migrating ====================================== -- create_table(:memos) -> 0.0051s == 20170806093511 CreateMemos: migrated (0.0063s) ============================= - Rails Server起動 $ rails s - ブラウザ経由で 192.168.78.90:3000/memos へ接続しCRUDアプリが動作することを確認 - 依存関係にあるGemをインストール $ bundle install - Git初期設定 $ pwd /home/ubuntu/mymemo $ git init $ git add . $ git commit -m "initial commit" ** heroku createしてみよう [#g4e5d129] - Gemfile内にherokuで必要なgemを追記 $ vi Gemfile gem 'rails_12factor', group: :production - Procfileを作成 $ vi Procfile web: bundle exec rails server -p $PORT $ git add . $ git commit -m "Gemfile updated, Procfile added" - Herokuアプリを作成 (heroku createコマンドでgit remote repositoryも自動的に作成) $ heroku create Creating app... done, ⬢ tranquil-headland-xxxxx https://tranquil-headland-90386.herokuapp.com/ | https://git.heroku.com/tranquil-headland-xxxxx.git ** Heroku上で確認してみよう [#ec6631ab] - Gitプッシュ $ git push heroku master - Heroku上にDB作成 (Addon利用) $ heroku addons:add heroku-postgresql Creating heroku-postgresql on ⬢ tranquil-headland-xxxxx... free Database has been created and is available ! This database is empty. If upgrading, you can transfer ! data from another database with pg:copy Created postgresql-encircled-xxxxx as DATABASE_URL Use heroku addons:docs heroku-postgresql to view documentation - DBマイグレート $ heroku run rake db:migrate - Herokuアプリの情報表示 (URL等) $ heroku apps:info === tranquil-headland-xxxxx Addons: heroku-postgresql:hobby-dev Auto Cert Mgmt: false Dynos: Git URL: https://git.heroku.com/tranquil-headland-xxxxx.git Owner: y.shimojo@example.com Region: us Repo Size: 0 B Slug Size: 0 B Stack: heroku-16 Web URL: https://tranquil-headland-xxxxx.herokuapp.com/ - ブラウザ経由で https://tranquil-headland-xxxxx.herokuapp.com/memos へアクセスしCRUDアプリを確認 - カレントディレクトリがHerokuアプリのローカルリポジトリ直下でない場合 (リモート<->ローカルリポジトリの紐付けができない) $ heroku apps:info ▸ No app specified. ▸ USAGE: heroku info my-app $ cd mymemo/ $ heroku apps:info - Herokuアプリの情報表示 (アプリ指定) $ heroku apps:info --app tranquil-headland-xxxxx - Herokuアプリ一覧表示 $ heroku list === y.shimojo@example.com Apps tranquil-headland-xxxxx - Herokuアプリ名を指定して情報表示 (heroku apps:info --app [app_name] でも可) $ heroku info tranquil-headland-xxxxx === tranquil-headland-xxxxx Addons: heroku-postgresql:hobby-dev Auto Cert Mgmt: false Dynos: web: 1 Git URL: https://git.heroku.com/tranquil-headland-xxxxx.git Owner: y.shimojo@example.com Region: us Repo Size: 37 KB Slug Size: 38 MB Stack: heroku-16 Web URL: https://tranquil-headland-xxxxx.herokuapp.com/ ** heroku ps/logs/maintenanceを使おう [#e1c8f1ca] - プロセス確認コマンド $ heroku ps Free dyno hours quota remaining this month: 550h 0m (100%) For more information on dyno sleeping and how to upgrade, see: https://devcenter.heroku.com/articles/dyno-sleeping === web (Free): bundle exec rails server -p $PORT (1) web.1: up 2017/08/06 10:52:12 +0000 (~ 4m ago) - Dynoの台数を変更するコマンド (1=>2) &color(red){※}; 有料プラン登録必要 $ heroku ps:scale web=2 Scaling dynos... ! ▸ Cannot update to more than 1 Free size dynos per process type. - ログ確認コマンド &color(red){※}; デフォルト1,500行まで保存 $ heroku logs - ログ確認コマンド (ストリーム表示) $ heroku logs --tail - メンテナンスモード切り替え $ heroku maintenance:on - メンテナンスモードの状態表示 $ heroku maintenance on - メンテナンスモード解除 $ heroku maintenance:off ** One-off Dynosを使ってみよう [#p4c14c8a] - heroku runでDynoに対してコマンド実行する際に裏側ではOne-off Dynoという一時的なDynoが起動 - bashコマンド実行 $ heroku run bash ~ $ ls app bin config config.ru db Gemfile Gemfile.lock lib log package.json Procfile public Rakefile README.md test tmp vendor ~ $ exit exit - rails consoleコマンド実行 $ heroku run rails console irb(main):001:0> m = Memo.new({title:"hoge",body:"hogehoge"}) => #<Memo id: nil, title: "hoge", body: "hogehoge", created_at: nil, updated_at: nil> irb(main):002:0> m.save (1.3ms) BEGIN SQL (1.7ms) INSERT INTO "memos" ("title", "body", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["title", "hoge"], ["body", "hogehoge"], ["created_at", "2017-08-06 11:07:29.045107"], ["updated_at", "2017-08-06 11:07:29.045107"]] (2.1ms) COMMIT => true irb(main):003:0> auit - ブラウザ経由でデータが追加されていることを確認 ** heroku releasesを使ってみよう [#yf791370] - index.html.erbに "hello world" 追記 $ vi app/views/memos/index.html.erb <p>hello world</p> - Rails Server起動しブラウザ経由 (192.168.78.90:3000/memos) で確認 - Gitプッシュ $ git add . $ git commit -m "added hello world" $ git push heroku master - Gitプッシュの度に作成されるリリース履歴を確認 $ heroku releases === tranquil-headland-xxxxx Releases - Current: v6 v6 Deploy 24731a70 y.shimojo@example.com 2017/08/06 11:15:12 +0000 (~ 1m ago) v5 Deploy 80b93304 y.shimojo@example.com 2017/08/06 10:52:04 +0000 (~ 24m ago) v4 Set LANG, RACK_ENV, RAILS_ENV, RAILS_LOG_TO_STDOUT, RAILS_SERVE_STATIC_FILES, SECRET_KEY_BASE config vars yjshimojo@gmail.com 2017/08/06 10:52:03 +0000 (~ 24m ago) v3 Attach DATABASE (@ref:postgresql-encircled-86963) y.shimojo@example.com 2017/08/06 10:42:49 +0000 (~ 33m ago) v2 Enable Logplex y.shimojo@example.com 2017/08/06 10:35:32 +0000 (~ 40m ago) v1 Initial release y.shimojo@example.com 2017/08/06 10:35:32 +0000 (~ 40m ago) - ロールバック (バージョン指定も可) $ heroku releases:rollback ** 環境変数を使ってみよう [#vc8f7599] - APIキーやDBホストは環境変数にセットすることが推奨 - 環境変数のセット $ heroku config:set mykey=value - 環境変数の確認 (key指定) $ heroku config:get mykey - 環境変数の確認 $ heroku config - 環境変数のアンセット $ heroku config:unset mykey - プログラム内から環境変数を参照 $ vi app/views/memos/index.html.erb <p><%= ENV['mykey'] %></p> - Gitプッシュ $ git add . $ git commit -m "mykey added" $ git push heroku master - ブラウザ経由でmykeyの値が表示されていることを確認 ** foremanを使ってみよう [#e0822fe7] - foremanインストール $ sudo apt-get install ruby-foreman - 環境変数をローカル環境でも参照する方法 (.envファイルを作成) $ vi .env mykey=mylocalvalue - 実行の際は rails s ではなく foreman コマンドを使用 (ポート番号: 5000) $ foreman start - &color(red){※}; 未解決: ブラウザ経由で 192.168.78.90:5000/memos へアクセスしてもサイト表示不可 - ローカル環境用の環境変数をgit ignoreに追加 $ vi .gitignore .env - Heroku環境の環境変数は -- Dashboard >> アプリ選択 >> Settings >> "Reveal Config Vars" を選択 ** Python 環境構築 [#gc05ec18] - 参考URL: https://devcenter.heroku.com/articles/getting-started-with-python#introduction *** ローカル開発環境の構築 [#x1fa6ffa] - 必要 (不足) モジュールインストール $ sudo apt-get install libbz2-dev llvm libncurses5-dev libncursesw5-dev - pyenv をクローン $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv - virtual env をクローン $ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv - bashrc 編集 $ vi ~/.bashrc export PYENV_ROOT="${HOME}/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH=${PYENV_ROOT}/bin:$PATH eval "$(pyenv init -)" fi $ source ~/.bashrc - インストール可能な Python 3.6 バージョン確認 $ pyenv install -l | grep 3.6 3.3.6 3.6.0 3.6-dev 3.6.1 3.6.2 - Python 3.6.1 インストール $ pyenv install 3.6.1 - Python バージョンのグローバル指定 $ pyenv global 3.6.1 $ python --version Python 3.6.1 *** Heroku アプリ作成 / デプロイ [#o1fbbc18] - サンプルアプリをクローン $ git clone https://github.com/heroku/python-getting-started.git $ cd python-getting-started - アプリ作成 (heroku create) $ heroku create Creating app... done, ⬢ lit-shelf-xxxxx https://lit-shelf-xxxxx.herokuapp.com/ | https://git.heroku.com/lit-shelf-xxxxx.git - デプロイ (git push) $ git push heroku master Counting objects: 328, done. Delta compression using up to 2 threads. Compressing objects: 100% (146/146), done. Writing objects: 100% (328/328), 50.90 KiB | 0 bytes/s, done. Total 328 (delta 160), reused 328 (delta 160) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Python app detected remote: -----> Installing python-3.6.2 remote: -----> Installing pip remote: -----> Installing requirements with pip remote: Collecting dj-database-url==0.4.1 (from -r /tmp/build_bb2966442a02c5c434c952dd4f1f9c93/requirements.txt (line 1)) remote: Downloading dj-database-url-0.4.1.tar.gz remote: Collecting Django==1.11 (from -r /tmp/build_bb2966442a02c5c434c952dd4f1f9c93/requirements.txt (line 2)) remote: Downloading Django-1.11-py2.py3-none-any.whl (6.9MB) remote: Collecting gunicorn==19.6.0 (from -r /tmp/build_bb2966442a02c5c434c952dd4f1f9c93/requirements.txt (line 3)) remote: Downloading gunicorn-19.6.0-py2.py3-none-any.whl (114kB) remote: Collecting psycopg2==2.6.2 (from -r /tmp/build_bb2966442a02c5c434c952dd4f1f9c93/requirements.txt (line 4)) remote: Downloading psycopg2-2.6.2.tar.gz (376kB) remote: Collecting whitenoise==3.3.0 (from -r /tmp/build_bb2966442a02c5c434c952dd4f1f9c93/requirements.txt (line 5)) remote: Downloading whitenoise-3.3.0-py2.py3-none-any.whl remote: Collecting pytz (from Django==1.11->-r /tmp/build_bb2966442a02c5c434c952dd4f1f9c93/requirements.txt (line 2)) remote: Downloading pytz-2017.2-py2.py3-none-any.whl (484kB) remote: Installing collected packages: dj-database-url, pytz, Django, gunicorn, psycopg2, whitenoise remote: Running setup.py install for dj-database-url: started remote: Running setup.py install for dj-database-url: finished with status 'done' remote: Running setup.py install for psycopg2: started remote: Running setup.py install for psycopg2: finished with status 'done' remote: Successfully installed Django-1.11 dj-database-url-0.4.1 gunicorn-19.6.0 psycopg2-2.6.2 pytz-2017.2 whitenoise-3.3.0 remote: remote: -----> $ python manage.py collectstatic --noinput remote: 63 static files copied to '/tmp/build_bb2966442a02c5c434c952dd4f1f9c93/gettingstarted/staticfiles', 79 post-processed. remote: remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 49.1M remote: -----> Launching... remote: Released v4 remote: https://lit-shelf-xxxxx.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/lit-shelf-xxxxx.git * [new branch] master -> master - アプリケーションのプロセス起動 $ heroku ps:scale web=1 - 状態確認 $ heroku ps - ブラウザ経由で https://lit-shelf-xxxxx.herokuapp.com/ へアクセスし確認 - ログ確認 $ heroku logs --tail - Procfile 確認 $ view Procfile - requirements.txt 確認 (依存関係のあるライブラリ管理) $ cat requirements.txt dj-database-url==0.4.1 Django==1.11 gunicorn==19.6.0 psycopg2==2.6.2 whitenoise==3.3.0 - ローカル仮想環境に requirements.txt をインストール &color(red){※}; python 3.6 から pyenv スクリプト (コマンド) は非推奨 $ python -m venv venv $ source venv/bin/activate $ pip install -r requirements.txt - ローカル仮想環境の無効化 $ deactivate - ローカル環境 (venv環境下) でサーバー起動 $ python manage.py collectstatic $ heroku local web [OKAY] Loaded ENV .env File as KEY=VALUE Format 12:55:24 web.1 | [2017-08-20 12:55:24 +0000] [12622] [INFO] Starting gunicorn 19.6.0 12:55:24 web.1 | [2017-08-20 12:55:24 +0000] [12622] [INFO] Listening at: http://0.0.0.0:5000 (12622) 12:55:24 web.1 | [2017-08-20 12:55:24 +0000] [12622] [INFO] Using worker: sync 12:55:24 web.1 | [2017-08-20 12:55:24 +0000] [12625] [INFO] Booting worker with pid: 12625 12:55:32 web.1 | Not Found: /favicon.ico - ブラウザ経由で 192.168.78.90:5000 へアクセスし確認 *** Herokuアプリ削除 [#d2f49a4b] *** Heroku アプリ削除 [#d2f49a4b] $ heroku destroy ▸ WARNING: This will delete ⬢ lit-shelf-xxxxx including all add-ons. ▸ To proceed, type lit-shelf-xxxxx or re-run this command with --confirm lit-shelf-xxxxx > lit-shelf-xxxxx Destroying ⬢ lit-shelf-xxxxx (including all add-ons)... done