Ruby on Rails
Heroku上にRailsアプリケーションをデプロイする
サーチ…
アプリケーションのデプロイ
Railsアプリケーションを含むディレクトリにいることを確認し、Herokuでアプリケーションを作成します。
$ heroku create example
Creating ⬢ example... done
https://example.herokuapp.com/ | https://git.heroku.com/example.git
出力の最初のURL、 http: //example.herokuapp.comは、アプリが利用できる場所です。 2番目のURL、[email protected]:example.gitは、リモートのgitリポジトリのURLです。
このコマンドは、初期化されたgitリポジトリでのみ使用してください。 heroku createコマンドは、このURLを指す "heroku"という名前のgitリモートを自動的に追加します。
app name引数( "example")はオプションです。アプリ名を指定しないと、ランダムな名前が生成されます。 Herokuのアプリ名はグローバルな名前空間にあるので、「ブログ」や「wiki」などの一般的な名前が既に使用されていることが期待できます。デフォルトの名前から始め、後でアプリケーションの名前を変更するほうが簡単です。
次に、コードを展開します。
$ git push heroku master
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.3.1
remote: -----> Installing dependencies using bundler 1.11.2
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote: Warning: the running version of Bundler is older than the version that created the lockfile. We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Fetching gem metadata from https://rubygems.org/..........
remote: Fetching version metadata from https://rubygems.org/...
remote: Fetching dependency metadata from https://rubygems.org/..
remote: Installing concurrent-ruby 1.0.2
remote: Installing i18n 0.7.0
remote: Installing rake 11.2.2
remote: Installing minitest 5.9.0
remote: Installing thread_safe 0.3.5
remote: Installing builder 3.2.2
remote: Installing mini_portile2 2.1.0
remote: Installing erubis 2.7.0
remote: Installing pkg-config 1.1.7
remote: Installing rack 2.0.1
remote: Installing nio4r 1.2.1 with native extensions
remote: Installing websocket-extensions 0.1.2
remote: Installing mime-types-data 3.2016.0521
remote: Installing arel 7.0.0
remote: Installing coffee-script-source 1.10.0
remote: Installing execjs 2.7.0
remote: Installing method_source 0.8.2
remote: Installing thor 0.19.1
remote: Installing multi_json 1.12.1
remote: Installing puma 3.4.0 with native extensions
remote: Installing pg 0.18.4 with native extensions
remote: Using bundler 1.11.2
remote: Installing sass 3.4.22
remote: Installing tilt 2.0.5
remote: Installing turbolinks-source 5.0.0
remote: Installing tzinfo 1.2.2
remote: Installing nokogiri 1.6.8 with native extensions
remote: Installing rack-test 0.6.3
remote: Installing sprockets 3.6.3
remote: Installing websocket-driver 0.6.4 with native extensions
remote: Installing mime-types 3.1
remote: Installing coffee-script 2.4.1
remote: Installing uglifier 3.0.0
remote: Installing turbolinks 5.0.0
remote: Installing activesupport 5.0.0
remote: Installing mail 2.6.4
remote: Installing globalid 0.3.6
remote: Installing activemodel 5.0.0
remote: Installing jbuilder 2.5.0
remote: Installing activejob 5.0.0
remote: Installing activerecord 5.0.0
remote: Installing loofah 2.0.3
remote: Installing rails-dom-testing 2.0.1
remote: Installing rails-html-sanitizer 1.0.3
remote: Installing actionview 5.0.0
remote: Installing actionpack 5.0.0
remote: Installing actionmailer 5.0.0
remote: Installing railties 5.0.0
remote: Installing actioncable 5.0.0
remote: Installing sprockets-rails 3.1.1
remote: Installing coffee-rails 4.2.1
remote: Installing jquery-rails 4.1.1
remote: Installing rails 5.0.0
remote: Installing sass-rails 5.0.5
remote: Bundle complete! 15 Gemfile dependencies, 54 gems now installed.
remote: Gems in the groups development and test were not installed.
remote: Bundled gems are installed into ./vendor/bundle.
remote: Bundle completed (31.86s)
remote: Cleaning up the bundler cache.
remote: Warning: the running version of Bundler is older than the version that created the lockfile. We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: I, [2016-07-08T17:08:57.046245 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-1bf5315c71171ad5f9cbef00193d56b7e45263ddc64caf676ce988cfbb6570bd.js
remote: I, [2016-07-08T17:08:57.046951 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-1bf5315c71171ad5f9cbef00193d56b7e45263ddc64caf676ce988cfbb6570bd.js.gz
remote: I, [2016-07-08T17:08:57.060208 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
remote: I, [2016-07-08T17:08:57.060656 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz
remote: Asset precompilation completed (4.06s)
remote: Cleaning assets
remote: Running: rake assets:clean
remote:
remote: ###### WARNING:
remote: No Procfile detected, using the default web server.
remote: We recommend explicitly declaring how to boot your server process via a Procfile.
remote: https://devcenter.heroku.com/articles/ruby-default-web-server
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote: Default types for buildpack -> console, rake, web, worker
remote:
remote: -----> Compressing...
remote: Done: 29.2M
remote: -----> Launching...
remote: Released v5
remote: https://example.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/example.git
* [new branch] master -> master
アプリケーションでデータベースを使用している場合は、次のコマンドを実行してデータベースを手動で移行する必要があります。
$ heroku run rake db:migrate
heroku run
後のコマンドは、Heroku heroku run
されます。次のコマンドを実行すると、対話型シェルセッションを取得できます。
$ heroku run bash
Webプロセスタイプを実行しているdynoが1つあることを確認します。
$ heroku ps:scale web=1
heroku psコマンドは、アプリケーションの実行中のダイノスを一覧表示します。
$ heroku ps
=== web (Standard-1X): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: starting 2016/07/08 12:09:06 -0500 (~ 2s ago)
あなたはheroku open
、ブラウザでアプリをheroku open
することができheroku open
。
$ heroku open
Herokuはherokuapp.com
ドメインのデフォルトのWeb URLをherokuapp.com
ます。本番用にスケールアップする準備ができたら、独自のカスタムドメインを追加できます。
Herokuのプロダクション環境とステージング環境の管理
すべてのHerokuアプリケーションは、少なくとも2つの環境で動作します:Heroku(私たちはそのプロダクションと呼ぶ)とあなたのローカルマシン(開発)です。複数の人がアプリケーションを開発している場合は、複数の開発環境(マシンごとに1つ、通常は1つ)が用意されています。通常、各開発者はテストを実行するためのテスト環境も備えています。残念ながら、このアプローチは、環境があまり似ていなくなるにつれて分解されます。たとえば、WindowsとMacは両方とも、HerokuのLinuxスタックとは異なる環境を提供します。したがって、ローカル開発環境で動作するコードは、本番環境に展開するときと同じ方法で動作することはいつも確実ではありません。
解決策は、可能な限り生産に類似したステージング環境を持つことです。これは、ステージングアプリケーションをホストする2番目のHerokuアプリケーションを作成することで実現できます。ステージングでは、実際のユーザーに影響を与える前に、プロダクションのような設定でコードをチェックすることができます。
一から始める
ローカルマシン上でアプリケーションを実行していて、それをHerokuにプッシュする準備ができているとします。リモート環境、ステージング、およびプロダクションの両方を作成する必要があります。最初にステージングに進むという習慣を得るために、まずこれから始めます:
$ heroku create --remote staging
Creating strong-river-216.... done
http://strong-river-216.heroku.com/ | https://git.heroku.com/strong-river-216.git
Git remote staging added
デフォルトでは、heroku CLIはheroku git remoteを使用してプロジェクトを作成します。ここでは、--remoteフラグで別の名前を指定しているので、Herokuにコードをプッシュして、アプリケーションに対してコマンドを実行すると、通常のgit push herokuマスターとは少し違って見えます。
$ git push staging master
...
$ heroku ps --remote staging
=== web: `bundle exec puma -C config/puma.rb``
web.1: up for 21s
ステージングアプリが起動して正しく動作したら、プロダクションアプリを作成できます:
$ heroku create --remote production
Creating fierce-ice-327.... done
http://fierce-ice-327.heroku.com/ | https://git.heroku.com/fierce-ice-327.git
Git remote production added
$ git push production master
...
$ heroku ps --remote production
=== web: `bundle exec puma -C config/puma.rb
web.1: up for 16s
それで、2つの別々のHerokuアプリケーション(同じステージングと1つのプロダクション)が同じように設定されているのと同じコードベースを実行できます。日常業務でどのアプリケーションを操作するのかを指定する必要があることを覚えておいてください。フラグ '--remote'を使うか、git configを使ってデフォルトのアプリケーションを指定することができます。