Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • コマンドライン
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリー
    • 継続的統合
  • 言語サポート
    • Node.js
    • Ruby
      • Bundler の使用
      • Rails のサポート
    • Python
      • Python でのバックグランドジョブ
      • Django の使用
    • Java
      • Maven の使用
      • Java でのデータベース操作
      • Spring Boot の使用
      • Java の高度なトピック
    • PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres Getting Started
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
    • Heroku Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
    • コンプライアンス
  • Heroku Enterprise
    • Private Space
      • インフラストラクチャネットワーキング
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • シングルサインオン (SSO)
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Integrating with Salesforce
  • 言語サポート
  • Ruby
  • Rails のサポート
  • Heroku スターターガイド (Rails 4.x)

Heroku スターターガイド (Rails 4.x)

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2022年11月17日(木)

Table of Contents

  • ローカルワークステーションの設定
  • アプリの記述
  • ウェルカムページ
  • Heroku gem
  • アプリでの Ruby バージョンの指定
  • Git でのアプリの保存
  • Heroku へのアプリケーションのデプロイ
  • データベースの移行
  • アプリケーションへのアクセス
  • ログの表示
  • dyno のスリープおよびスケーリング
  • コンソール
  • Rake
  • Web サーバー
  • Rails アセットパイプライン
  • トラブルシューティング
  • 完了

Heroku dyno、Heroku Postgres、および Heroku Data for Redis の無料プランは 2022 年 11 月 28 日で提供を終了します​。

低料金プラン​を使用してこのチュートリアルを完了することをお勧めします。資格のある学生の皆様は、新しい Heroku for GitHub Students プログラム​を通じてプラットフォームクレジットを申請できます。

 

Rails の利用可能な最新バージョンは Rails 7​ です。新しいアプリケーションを開始する場合は、最新リリースバージョンを使用することをお勧めします。

Ruby on Rails は、Ruby​ で記述され、広く使われている Web フレームワークです。このガイドでは、Heroku での Rails 4 の使用について説明します。Heroku での Rails 旧バージョンの実行の詳細については、「Heroku スターターガイド (Rails 3.x)​」を参照してください。

すでに Heroku および Rails に詳しい場合は、シンプルな Heroku (Rails 4) のガイド​を参照してください。Heroku で使用するためにアプリを開発および設計する方法の一般的な情報については、「Architecting Applications for Heroku​」 (Heroku のアプリケーション設計) を参照してください。

このガイドでは、以下が必要となります。

  • Ruby/Rails に関する基本的な知識
  • Ruby 2.0.0+、Rubygems、Bundler、Rails 4 のローカルにインストールされたバージョン+
  • Git に関する基本的な知識
  • 確認済みの Heroku アカウント
  • Eco dyno プラン​のサブスクリプション (推奨)

ローカルワークステーションの設定

Heroku Toolbelt​ をローカルワークステーションにインストールします。これにより、Heroku コマンドラインクライアント​、Foreman、Git リビジョン管理システムにアクセスできるようになります。Ruby と Rails をインストール​する必要もあります。

インストールすると、コマンドシェルから $ heroku​ コマンドにアクセスできます。Heroku アカウントを作成したときに使用したメールアドレスとパスワードでログインします。

コマンドの前にある $​ シンボルは、これらのコマンドはコマンドライン、プロンプト、ターミナルで適切なアクセス許可で実行する必要があることを示しています。$​ シンボルはコピーしないでください。

$ heroku login
Enter your Heroku credentials.
Email: schneems@example.com
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /Users/adam/.ssh/id_rsa.pub

プロンプトで Enter キーを押し、後でコードのプッシュに使用するため、既存の ssh​ キーをアップロードするか新しいキーを作成します。

アプリの記述

Heroku でアプリを実行するには、Postgres データベースで使用できるようにアプリを設定し、Gemfile​ ですべての依存関係を宣言し、rails_12factor​ gem が Gemfile​ の本番環境グループにあるようにする必要があります。

既存のアプリで始める場合は、Rails 4 にアップグレードしてから​続行してください。そうでない場合、vanilla Rails 4 は適切なサンプルアプリとして機能します。新しいアプリを構築するには、$ rails -v​ を使用して、Rails 4.x を使用していることを確認してください。Rails の新しいバージョンは、以下を実行すると取得できます。

$ gem install rails  -v 4.2.9 --no-document
Successfully installed rails-4.2.9
1 gem installed

注意: ​Rails のより新しいバージョン​が利用可能な場合があります。常に最新の Rails を実行することをお勧めします。Rails 5 を Heroku​ で実行できます。

次に、新しいアプリを作成します。

$ rails _4.2.9_ new myapp --database=postgresql

作成したら、アプリケーションのディレクトリに移動します。

$ cd myapp

問題が発生したり、このチュートリアルで先に進むことができなくなったりした場合、このドキュメントで解決方法が後述されている可能性があります。問題が発生したら、ドキュメント全体を読んでから現在の手順に戻ってみてください。これまでの手順がすべて正しく行われているかを確認することも、解決に役立つ場合があります。

--database=postgresql​ を指定せずに作成されたアプリがある場合は、Rails プロジェクトに pg​ gem を追加する必要があります。Gemfile​ を編集し、以下の行を変更します。

gem 'sqlite3'

変更後は次のようになります。

gem 'pg'

開発には PostgreSQL を使用することを強くお勧めします。処理中の開発と​開発環境を一致させることで、環境の違いによる微妙なバグの発生が阻止されます。Postgres はローカルにインストールしてください​ (まだシステムにない場合)。

(新しい Gemfile.lock​ を生成するために) 依存関係を再インストールします。

$ bundle install

この変更が必要な理由、および postgres がローカルで実行されるようにアプリを設定する方法の詳細については、「why you cannot use Sqlite3 on Heroku​」 (Heroke で Sqlite3 を使用できない理由) を参照してください。

pg​ gem の使用に加えて、config/database.yml​ で postgresql​ アダプターが使用されていることも確認する必要があります。

config/database.yml​ ファイルの開発セクションの外観は次のようになります。

$ cat config/database.yml
# PostgreSQL. Versions 9.3 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On macOS with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On macOS with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem "pg"
#
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

adapter​ セクションの postgresql​ の末尾で sql​ を省略するとアプリケーションが機能しないため、注意してください。

ウェルカムページ

Rails 4 の本番環境には静的なインデックスページがありません。新しいアプリを使用するとき、本番環境にはルートページがないため、ルートページを作成する必要があります。最初に、welcome​ と呼ばれるコントローラーを作成し、ホームページが本番稼働するようにします。

$ rails generate controller welcome

次に、インデックスページを追加します。

ファイル app/views/welcome/index.html.erb​ で、以下のように記述します。

<h2>Hello World</h2>
<p>
  The time is now: <%= Time.now %>
</p>

その後、Rails をこのアクションにルーティングする必要があります。config/routes.rb​ を編集して、新しいメソッドにインデックスページを設定します。

ファイル config/routes.rb​ の 2 行目に以下を追加します。

  root 'welcome#index'

サーバーを実行して、このページが存在することを検証できます。

$ rails server

さらに、ブラウザで http://localhost:3000​ にアクセスします。ページが表示されない場合、サーバーに出力されたログを使用​してデバッグします。

Heroku gem

これまで、Heroku の統合は Rails プラグインシステム (Rails 4 で削除) の使用に依存していました。静的なアセットの提供やログ記録などの機能を Heroku で有効にするには、Gemfile​ に rails_12factor​ gem を追加してください。

Gemfile​ の末尾に以下を追加します。

gem 'rails_12factor', group: :production

次に、以下を実行します。

$ bundle install

Rails の統合については、Ruby サポートページ​でより詳細に説明されています。

アプリでの Ruby バージョンの指定

Rails 4 では、Ruby 1.9.3 以上が必要です。Heroku にはデフォルトで Ruby の最新バージョンがインストールされていますが、Gemfile​ で ruby​ DSL を使用して、特定のバージョンを指定することができます。このガイドでは、Ruby 2 を使用します。

Gemfile​ の末尾に以下を追加します。

ruby "2.3.4"

同じ Ruby のバージョンをローカルでも実行している必要があります。これは、$ ruby -v​ を実行して確認できます。ここから、Heroku での Ruby バージョンの指定​に関する詳細を確認できます。

Git でのアプリの保存

Heroku では、プロジェクトのデプロイを分散型ソース管理ツールである Git​ に依存しています。プロジェクトがまだ Git で管理されていない場合は、システムに git​ があることを検証してください。

$ git --help
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--super-prefix=<path>] [--config-env=<name>=<envvar>]

出力がない、または command not found​ が出力される場合は、システムへのインストールが必要です。Heroku Toolbelt​ がインストールされていることを確認してください。

Git が機能することを検証した後、$ ls​ を実行して Rails アプリのディレクトリにいることを確認してください。

出力は以下のようになります。

$ ls
Gemfile
Gemfile.lock
README.md
Rakefile
app
bin
config
config.ru
db
lib
log
public
storage
test
tmp
vendor

次に、Rails アプリのディレクトリで以下のコマンドを実行し、コードを初期化して Git にコミットします。

$ git init
$ git add .
$ git commit -m "init"

以下を実行し、すべてが正しくコミットしているかどうかを確認できます。

$ git status
On branch main
nothing to commit, working tree clean

アプリケーションが Git にコミットされ、Heroku にデプロイできるようになりました。

Heroku へのアプリケーションのデプロイ

dyno とデータベースを使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。コストを抑制するために、完了したらすぐにアプリを削除​し、データベースも削除​してください。

Rails アプリが含まれるディレクトリにいることを確認してから、Heroku でアプリを作成します。

$ heroku create --stack heroku-20
Creating app... done, mysterious-gorge-26971, stack is heroku-20
https://mysterious-gorge-26971.herokuapp.com/ | https://git.heroku.com/mysterious-gorge-26971.git

以下を実行して、リモートがプロジェクトに追加されていることを確認できます。

$ git config --list --local | grep heroku
remote.heroku.url=https://git.heroku.com/mysterious-gorge-26971.git
remote.heroku.fetch=+refs/heads/*:refs/remotes/heroku/*

fatal: not in a git directory​ が表示される場合は、ディレクトリが正しくない可能性があります。表示されなければ、コードをデプロイできます。コードをデプロイした後、データベースを移行する必要があります。データベースが適切にスケールされていることを確認し、問題はログを使用してすべてデバッグしてください。

業界での変更に従い、Heroku ではデフォルトの Git ブランチ名を main​ に更新しました。デプロイ中のプロジェクトでデフォルトのブランチ名として master​ を使用している場合は、git push heroku master​ を使用してください。

コードをデプロイします。

$ git push heroku main
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.3.4
remote: -----> Installing dependencies using bundler 1.15.2
remote:        Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote:        Warning: the running version of Bundler (1.15.2) is older than the version that created the lockfile (1.15.4). 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:        Fetching rake 12.0.0
remote:        Fetching i18n 0.8.6
remote:        Fetching minitest 5.10.3
remote:        Installing i18n 0.8.6
remote:        Installing rake 12.0.0
remote:        Installing minitest 5.10.3
remote:        Fetching thread_safe 0.3.6
remote:        Installing thread_safe 0.3.6
remote:        Fetching builder 3.2.3
remote:        Fetching erubis 2.7.0
remote:        Installing builder 3.2.3
remote:        Fetching mini_portile2 2.2.0
remote:        Installing erubis 2.7.0
remote:        Installing mini_portile2 2.2.0
remote:        Fetching rack 1.6.8
remote:        Fetching mime-types-data 3.2016.0521
remote:        Installing rack 1.6.8
remote:        Installing mime-types-data 3.2016.0521
remote:        Fetching arel 6.0.4
remote:        Installing arel 6.0.4
remote:        Using bundler 1.15.2
remote:        Fetching coffee-script-source 1.12.2
remote:        Installing coffee-script-source 1.12.2
remote:        Fetching execjs 2.7.0
remote:        Fetching thor 0.20.0
remote:        Installing execjs 2.7.0
remote:        Fetching concurrent-ruby 1.0.5
remote:        Installing thor 0.20.0
remote:        Fetching ffi 1.9.18
remote:        Installing concurrent-ruby 1.0.5
remote:        Fetching multi_json 1.12.1
remote:        Installing multi_json 1.12.1
remote:        Fetching json 1.8.6
remote:        Installing json 1.8.6 with native extensions
remote:        Fetching pg 0.21.0
remote:        Installing ffi 1.9.18 with native extensions
remote:        Installing pg 0.21.0 with native extensions
remote:        Fetching rails_serve_static_assets 0.0.5
remote:        Installing rails_serve_static_assets 0.0.5
remote:        Fetching rails_stdout_logging 0.0.5
remote:        Installing rails_stdout_logging 0.0.5
remote:        Fetching rb-fsevent 0.10.2
remote:        Installing rb-fsevent 0.10.2
remote:        Fetching rdoc 4.3.0
remote:        Installing rdoc 4.3.0
remote:        Fetching tilt 2.0.8
remote:        Installing tilt 2.0.8
remote:        Fetching turbolinks-source 5.0.3
remote:        Installing turbolinks-source 5.0.3
remote:        Fetching tzinfo 1.2.3
remote:        Installing tzinfo 1.2.3
remote:        Fetching nokogiri 1.8.0
remote:        Installing nokogiri 1.8.0 with native extensions
remote:        Fetching mime-types 3.1
remote:        Installing mime-types 3.1
remote:        Fetching rack-test 0.6.3
remote:        Installing rack-test 0.6.3
remote:        Fetching coffee-script 2.4.1
remote:        Installing coffee-script 2.4.1
remote:        Fetching uglifier 3.2.0
remote:        Installing uglifier 3.2.0
remote:        Fetching sprockets 3.7.1
remote:        Installing sprockets 3.7.1
remote:        Fetching rails_12factor 0.0.3
remote:        Installing rails_12factor 0.0.3
remote:        Fetching turbolinks 5.0.1
remote:        Installing turbolinks 5.0.1
remote:        Fetching activesupport 4.2.9
remote:        Installing activesupport 4.2.9
remote:        Fetching rb-inotify 0.9.10
remote:        Installing rb-inotify 0.9.10
remote:        Fetching mail 2.6.6
remote:        Installing mail 2.6.6
remote:        Fetching rails-deprecated_sanitizer 1.0.3
remote:        Installing rails-deprecated_sanitizer 1.0.3
remote:        Fetching globalid 0.4.0
remote:        Installing globalid 0.4.0
remote:        Fetching activemodel 4.2.9
remote:        Installing activemodel 4.2.9
remote:        Fetching jbuilder 2.7.0
remote:        Installing jbuilder 2.7.0
remote:        Fetching sass-listen 4.0.0
remote:        Installing sass-listen 4.0.0
remote:        Fetching activejob 4.2.9
remote:        Installing activejob 4.2.9
remote:        Fetching activerecord 4.2.9
remote:        Installing activerecord 4.2.9
remote:        Fetching sass 3.5.1
remote:        Installing sass 3.5.1
remote:        Fetching rails-dom-testing 1.0.8
remote:        Fetching loofah 2.0.3
remote:        Installing rails-dom-testing 1.0.8
remote:        Installing loofah 2.0.3
remote:        Fetching rails-html-sanitizer 1.0.3
remote:        Installing rails-html-sanitizer 1.0.3
remote:        Fetching sdoc 0.4.2
remote:        Fetching actionview 4.2.9
remote:        Installing sdoc 0.4.2
remote:        Installing actionview 4.2.9
remote:        Fetching actionpack 4.2.9
remote:        Installing actionpack 4.2.9
remote:        Fetching railties 4.2.9
remote:        Fetching actionmailer 4.2.9
remote:        Fetching sprockets-rails 3.2.0
remote:        Installing sprockets-rails 3.2.0
remote:        Installing actionmailer 4.2.9
remote:        Installing railties 4.2.9
remote:        Fetching jquery-rails 4.3.1
remote:        Fetching rails 4.2.9
remote:        Fetching coffee-rails 4.1.1
remote:        Installing coffee-rails 4.1.1
remote:        Fetching sass-rails 5.0.6
remote:        Installing sass-rails 5.0.6
remote:        Installing jquery-rails 4.3.1
remote:        Installing rails 4.2.9
remote:        Bundle complete! 13 Gemfile dependencies, 58 gems now installed.
remote:        Gems in the groups development and test were not installed.
remote:        Bundled gems are installed into ./vendor/bundle.
remote:        The latest bundler is 1.15.4, but you are currently running 1.15.2.
remote:        To update, run `gem install bundler`
remote:        Bundle completed (27.77s)
remote:        Cleaning up the bundler cache.
remote: -----> Installing node-v6.11.1-linux-x64
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        I, [2017-08-22T14:43:37.636715 #1379]  INFO -- : Writing /tmp/build_2c1df257010d0249b8e774d0a81661c0/public/assets/application-da9278e46ebce38e9f8d754b05bbae46591ded89a2ae20880119fd551853710d.js
remote:        I, [2017-08-22T14:43:37.637329 #1379]  INFO -- : Writing /tmp/build_2c1df257010d0249b8e774d0a81661c0/public/assets/application-da9278e46ebce38e9f8d754b05bbae46591ded89a2ae20880119fd551853710d.js.gz
remote:        I, [2017-08-22T14:43:37.648501 #1379]  INFO -- : Writing /tmp/build_2c1df257010d0249b8e774d0a81661c0/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
remote:        I, [2017-08-22T14:43:37.648845 #1379]  INFO -- : Writing /tmp/build_2c1df257010d0249b8e774d0a81661c0/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz
remote:        Asset precompilation completed (5.59s)
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: 40.5M
remote: -----> Launching...
remote:        Released v5
remote:        https://secret-taiga-10886.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/secret-taiga-10886.git
 * [new branch]      master -> master

出力に警告やエラーがないかどうかを必ず確認してください。何も問題がなければ、データベースを移行できます。

データベースの移行

アプリケーションでデータベースを使用している場合は、以下を実行して手動でデータベースを移行する必要があります。

$ heroku run rake db:migrate

heroku run​ の後のコマンドはすべて Heroku dyno​ で実行されます。$ heroku run bash​ を実行して、対話型シェルセッションを取得できます。

アプリケーションへのアクセス

コードが Heroku にデプロイされ、プロセスタイプを実行するように Heroku に指示できるようになりました。Heroku では、これは dyno​ (Heroku の構成の基本単位である軽量コンテナ) で関連付けられているコマンドを実行して行われます。

1 つの dyno によって web​ プロセスタイプが実行されていることを確認します。

$ heroku ps:scale web=1

アプリの dyno の状態をチェックできます。heroku ps​ コマンドにより、アプリケーションで実行中の dyno の一覧が表示されます。

$ heroku ps
 ▸    Starting November 28th, 2022, free Heroku Dynos will no longer be
 ▸    available. To keep your apps running, subscribe to Eco or upgrade to
 ▸    another paid tier. Learn more in our blog
 ▸    (https://blog.heroku.com/new-low-cost-plans).
Free dyno hours quota remaining this month: 1000h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): bin/rails server -p ${PORT:-5000} -e $RAILS_ENV (1)
web.1: up 2022/11/09 15:24:10 -0800 (~ 2s ago)

ここでは、1 つの dyno が実行中です。

heroku open​ を使用して、ブラウザでアプリにアクセスできます。

$ heroku open

すると、先ほど挿入したテキスト「Hello World」が表示されます。

Heroku では、開発中の複雑さをなくすため、デフォルトの URL が提供されます。スケールアップして Heroku を本番環境で使用する準備が整っている場合は、独自のカスタムドメイン​を追加できます。

ログの表示

アプリが適切に機能しないような問題が発生した場合は、ログをチェックする必要があります。

ログコマンド​の 1 つである heroku logs​ を使って、実行中のアプリに関する情報を表示できます。

$ heroku logs
2022-11-09T23:23:21.343367+00:00 app[api]: Release v1 created by user developer@example.com2022-11-09T23:23:21.343367+00:00 app[api]: Initial release by user developer@example.com2022-11-09T23:23:21.532821+00:00 app[api]: Release v2 created by user developer@example.com2022-11-09T23:23:21.532821+00:00 app[api]: Enable Logplex by user developer@example.com2022-11-09T23:23:23.000000+00:00 app[api]: Build started by user developer@example.com2022-11-09T23:24:02.733681+00:00 app[api]: Set LANG, RACK_ENV, RAILS_ENV, RAILS_LOG_TO_STDOUT, RAILS_SERVE_STATIC_FILES, SECRET_KEY_BASE config vars by user developer@example.com2022-11-09T23:24:02.733681+00:00 app[api]: Release v3 created by user developer@example.com2022-11-09T23:24:03.882779+00:00 app[api]: Attach DATABASE (@ref:postgresql-defined-88230) by user developer@example.com2022-11-09T23:24:03.882779+00:00 app[api]: Running release v4 commands by user developer@example.com2022-11-09T23:24:03.895277+00:00 app[api]: @ref:postgresql-defined-88230 completed provisioning, setting DATABASE_URL. by user developer@example.com2022-11-09T23:24:03.895277+00:00 app[api]: Release v5 created by user developer@example.com2022-11-09T23:24:04.292076+00:00 app[api]: Deploy a2830cc3 by user developer@example.com2022-11-09T23:24:04.292076+00:00 app[api]: Release v6 created by user developer@example.com2022-11-09T23:24:04.309828+00:00 app[api]: Scaled to console@0:Free rake@0:Free web@1:Free by user developer@example.com2022-11-09T23:24:06.386981+00:00 heroku[web.1]: Starting process with command `bin/rails server -p ${PORT:-5000} -e production`
2022-11-09T23:24:07.000000+00:00 app[api]: Build succeeded
2022-11-09T23:24:09.769468+00:00 app[web.1]: => Booting Puma
2022-11-09T23:24:09.769508+00:00 app[web.1]: => Rails 7.0.4 application starting in production
2022-11-09T23:24:09.769509+00:00 app[web.1]: => Run `bin/rails server --help` for more startup options
2022-11-09T23:24:10.804322+00:00 app[web.1]: Puma starting in single mode...
2022-11-09T23:24:10.804359+00:00 app[web.1]: * Puma version: 5.6.5 (ruby 2.7.2-p137) ("Birdie's Version")
2022-11-09T23:24:10.804360+00:00 app[web.1]: *  Min threads: 5
2022-11-09T23:24:10.804360+00:00 app[web.1]: *  Max threads: 5
2022-11-09T23:24:10.804360+00:00 app[web.1]: *  Environment: production
2022-11-09T23:24:10.804360+00:00 app[web.1]: *          PID: 4
2022-11-09T23:24:10.804597+00:00 app[web.1]: * Listening on http://0.0.0.0:17576
2022-11-09T23:24:10.810258+00:00 app[web.1]: Use Ctrl-C to stop
2022-11-09T23:24:10.899039+00:00 heroku[web.1]: State changed from starting to up

以下のように --tail​ フラグオプションを使用してログコマンドを実行することで、完全なログストリームを入手することもできます。

$ heroku logs --tail

dyno のスリープおよびスケーリング

デフォルトでは、アプリは Eco dyno でデプロイされます。Eco dyno はアイドル状態が 30 分続くとスリープし、スリープする​前のアクティブな (トラフィックを受信する) 状態でいられるのは、一日あたり 18 時間未満です。 Eco dyno がスリープ状態で、18 時間を超過していない場合は、Web リクエストによってスリープ解除されます。スリープすると、スリープ解除するときの最初のリクエスト時に数秒の遅延が発生します。その後のリクエストは正常に処理されます。

$ heroku ps:scale web=1

dyno がスリープしないようにするには、「dyno タイプ​」の記事で紹介されている Basic または Professional の dyno タイプにアップグレードできます。たとえば、アプリを Professional dyno に移行すると、Heroku に特定の数の dyno の実行を指示するコマンドを実行し、各 dyno で Web プロセスタイプを実行させて、アプリを簡単にスケールすることができます。

コンソール

Heroku では、heroku run​ コマンドを使用して、One-off dyno​ (必要な場合にのみ実行するスクリプトおよびアプリケーション) でコマンドを実行できます。これを使用して、アプリの環境で試行するためにローカルターミナルにアタッチされた Rails コンソールプロセスを起動します。

$ heroku run rails console
irb(main):001:0> puts 1+1
2

Rake

Rake は、コンソールと同様に、アタッチされたプロセスとして実行できます。

$ heroku run rake db:migrate

Web サーバー

デフォルトで、アプリの Web プロセスでは、Webrick を使用する rails server​ が実行されます。テストにはこれで十分ですが、本番環境のアプリではより堅牢な Web サーバーに切り替えてください。Cedar の場合、Web サーバーには Puma をお勧めします​。選択した Web サーバーには関係なく、本番環境のアプリでは Procfile​ で明示的に Web サーバーが常に指定される必要があります。

最初に、Puma をアプリケーションの Gemfile​ に追加します。

Gemfile​ の末尾に以下を追加します。

#gem 'puma'

次に、以下を実行します。

$ bundle install

これで、アプリで Puma が使用されるように設定する準備が整いました。このチュートリアルでは Puma のデフォルト設定を使用しますが、config/puma.rb​ ファイルを生成し、Puma のドキュメントを読んで​パフォーマンスを最大限にするためのアプリケーションの設定について確認することをお勧めします。

最後に、アプリケーションディレクトリのルートで Procfile​ を作成し、Rails の実行方法を Heroku に伝える必要があります。

Procfile

Procfile​ を呼ばれるファイルを作成し、以下を入力して、Web プロセスを起動するのに使用するコマンドを変更します。

ファイル Procfile​ で、以下のように記述します。

web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}

注意: ​Procfile​ の大文字と小文字は区別されます。最初の文字は大文字でなければなりません。

パフォーマンスを最大限にするために、Puma のドキュメント​に基づいて設定ファイルを生成することをお勧めします。

環境で RACK_ENV​ を開発に設定し、接続先の PORT​ を設定します。Heroku にプッシュする前に、Heroku アプリが実行される環境となる本番環境に設定された RACK_ENV​ でテストする必要があります。

$ echo "RACK_ENV=development" >>.env
$ echo "PORT=3000" >> .env

さらに、ローカル環境の設定として、.env​ を .gitignore​ に追加する必要があります。

$ echo ".env" >> .gitignore
$ git add .gitignore
$ git commit -m "add .env to .gitignore"

Foreman を使用して、Procfile をローカルでテストします。

$ gem install foreman

これで、以下を実行して Web サーバーを起動できます。

$ foreman start
18:24:56 web.1  | I, [2013-03-13T18:24:56.885046 #18793]  INFO -- : listening on addr=0.0.0.0:5000 fd=7
18:24:56 web.1  | I, [2013-03-13T18:24:56.885140 #18793]  INFO -- : worker=0 spawning...
18:24:56 web.1  | I, [2013-03-13T18:24:56.885680 #18793]  INFO -- : master process ready
18:24:56 web.1  | I, [2013-03-13T18:24:56.886145 #18795]  INFO -- : worker=0 spawned pid=18795
18:24:56 web.1  | I, [2013-03-13T18:24:56.886272 #18795]  INFO -- : Refreshing Gem list
18:24:57 web.1  | I, [2013-03-13T18:24:57.647574 #18795]  INFO -- : worker=0 ready

問題がなければ Ctrl-C を押して終了し、変更を Heroku にデプロイできます。

$ git add .
$ git commit -m "use puma via procfile"
$ git push heroku main

ps​ をチェックすると、Web プロセスによって、Web サーバーとして Puma を指定している新しいコマンドが使用されていることが分かります。

$ heroku ps
 ▸    Starting November 28th, 2022, free Heroku Dynos will no longer be
 ▸    available. To keep your apps running, subscribe to Eco or upgrade to
 ▸    another paid tier. Learn more in our blog
 ▸    (https://blog.heroku.com/new-low-cost-plans).
Free dyno hours quota remaining this month: 1000h 0m (100%)
Free dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development} (1)
web.1: starting 2022/11/09 15:24:37 -0800 (~ 6s ago)

ログにも、Puma が使用されていることが反映されています。

$ heroku logs

Rails アセットパイプライン

Heroku へのデプロイ時に Rails アセットパイプライン​を起動する方法は複数あります。アセットパイプラインに関する一般的な情報については、「Rails 3.1+ Asset Pipeline on Heroku Cedar​」 (Heroku Ceder での Rails 3.1 およびアセットパイプライン) の記事を参照してください。

config.assets.initialize_on_precompile​ オプションは削除済みであり、Rails 4 では必要ありません。また、アセットコンパイルにおけるエラーはプッシュが失敗する原因となります。Rails 4 アセットパイプラインのサポートについては、Ruby サポート​ページを参照してください。

トラブルシューティング

プッシュしたアプリがクラッシュした (heroku ps​ でステータス crashed​ が表示された) 場合は、ログをチェックしてクラッシュの原因を見つけてください。一般的な問題には、たとえば以下があります。

開発/テスト gem でのランタイムの依存関係

デプロイ時に gem がない場合は、Bundler グループをチェックしてください。Heroku では、アプリは development​ や test​ グループなしで構築されます。アプリの実行がこれらのグループのいずれかからの gem に依存している場合、これをグループから除外します。

最もよくある例の 1 つとして、Rakefile​ で Rspec タスクを使用する場合があります。Heroku のデプロイで以下が表示されます。

$ heroku run rake -T
Running `bundle exec rake -T` attached to terminal... up, ps.3
rake aborted!
no such file to load -- rspec/core/rake_task

そして、以下の問題が発生します。最初に、問題をローカルにコピーします。

$ bundle install --without development:test
…
$ bundle exec rake -T
rake aborted!
no such file to load -- rspec/core/rake_task

これらの Rake タスクを gem のロード時に条件付きにすることで、問題を解消できます。たとえば、次のようになります。

Rakefile

begin
  require "rspec/core/rake_task"

  desc "Run all examples"

  RSpec::Core::RakeTask.new(:spec) do |t|
    t.rspec_opts = %w[--color]
    t.pattern = 'spec/**/*_spec.rb'
  end
rescue LoadError
end

これがローカルで動作することを確認してから、Heroku にプッシュします。

完了

これで、最初のアプリケーションが Heroku にデプロイされました。次のステップは、独自のアプリケーションのデプロイです。より詳細な情報については、Heroku Dev Center の Ruby 言語サポート​を参照してください。

関連カテゴリー

  • Rails のサポート
Unicorn を使用した Rails アプリケーションのデプロイ Heroku スターターガイド (Rails 5.x)

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences