Heroku スターターガイド (Ruby)
はじめに
このチュートリアルを完了して、サンプル Ruby アプリを Heroku にデプロイします。
このチュートリアルでは、以下が用意されていることを前提としています。
- 確認済みの Heroku アカウント
- ローカルにインストールされた Ruby 3.2.4。OS X、Windows、および Linux での Ruby および Rails のインストールガイドを参照してください。
- ローカルにインストールされた Bundler。
gem install bundler
を実行します。 - ローカルにインストールされた Postgres
- Eco dyno プランのサブスクリプション (推奨)
Windows をお使いの場合は、「Heroku スターターガイド (Ruby) (Microsoft Windows)」を参照してください。
Windows 用ガイドを使わない場合、OpenSSL と Puma Web サーバーを手動でインストールする必要があるため、bundle install
を実行できません。
まず、OpenSSL をダウンロードします。次に、ダウンロードした lzma を 7Zip で展開してから、tar ファイルを C:\openssl
に展開します。
ファイルが正しい場所に格納されていることを確認します。
$ dir c:\openssl
bin include lib ssl
次に、以下を実行します。
$ gem install puma -- --with-opt-dir=c:\openssl
このコマンドが終了したら、以下を実行します。
$ bundle update puma
dyno とデータベースを使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。低料金プランを使用してこのチュートリアルを完了することをお勧めします。資格のある学生の皆様は、新しい Heroku for GitHub Students プログラムを通じてプラットフォームクレジットを申請できます。
設定する
Heroku CLI には、一般によく使われている Git というバージョン管理システムが必要です。Git がまだインストールされていない場合は、先に進む前に次の手順を完了してください。
Heroku Command Line Interface (CLI) をインストールします。CLI は、アプリケーションの管理やスケール、アドオンのプロビジョニング、ログの表示、アプリケーションのローカル実行に使用できます。
ご使用のプラットフォーム用のインストーラをダウンロードし、実行してください。
$ brew tap heroku/brew && brew install heroku
インストール後、コマンドシェルで heroku
コマンドを使用できます。
Heroku CLI にログインするには、heroku login
コマンドを使用します。
$ heroku login
heroku: Press any key to open up the browser to login or q to exit
› Warning: If browser does not open, visit
› https://cli-auth.heroku.com/auth/browser/***
heroku: Waiting for login...
Logging in... done
Logged in as me@example.com
このコマンドにより、Web ブラウザで Heroku ログインページが開きます。ブラウザですでに Heroku にログインしている場合は、ページの Log in
(ログイン) ボタンをクリックします。
この認証は、heroku
と git
コマンドが正常に動作するために必要な操作です。
外部の HTTP/HTTPS サービスへの接続にプロキシを使用するファイアウォールを利用している場合は、heroku
コマンドを実行する前に、ローカルの開発環境で HTTP_PROXY
または HTTPS_PROXY
環境変数を設定してください。
サンプルアプリを複製する
Heroku をはじめて使う場合は、 Heroku が提供するサンプルアプリケーションを使ってこのチュートリアルを行うことをお勧めします。
デプロイする既存のアプリケーションを用意してある場合は、 代わりにこの記事に従います。
コードのローカルバージョンを得るために、サンプルアプリケーションを複製します。以下のコマンドをローカルのコマンドシェルまたはターミナルで実行します。
$ git clone https://github.com/heroku/ruby-getting-started.git
$ cd ruby-getting-started
これで、シンプルなアプリケーションを格納した、正常な Git リポジトリを準備できました。これには Gemfile
ファイルが含まれ、Ruby の依存関係マネージャーの bundler
で依存関係のインストールに使用されます。
Procfile を定義する
Procfile は、アプリケーションのルートディレクトリにあるテキストファイルです。このファイルを使って、アプリの起動時に実行するコマンドを明示的に宣言します。
サンプルアプリの Procfile
は、次のようになっています。
web: bundle exec puma -C config/puma.rb
この Procfile では、単一のプロセスタイプの web
と、その実行に必要なコマンドを宣言しています。 ここでは、web
という名前が重要です。 これは、このプロセスタイプを Heroku の HTTP ルーティングスタックにアタッチし、デプロイ後に Web トラフィックを受信することを宣言しています。 ここで使われているコマンドは、Puma (Web サーバー) を実行し、設定ファイルを渡しています。
Procfile には追加のプロセスタイプを含めることができます。 たとえば、キューからアイテムを取り出して処理するバックグラウンドワーカープロセスを宣言できます。
アプリを作成する
Eco にサブスクライブしている場合、アプリではデフォルトで Eco dyno が使用されます。それ以外の場合は、デフォルトで Basic dyno が使用されます。Eco dyno プランは、アカウント内のすべての Eco dyno で共有されます。これは、多数の小さいアプリを Heroku にデプロイする予定がある場合にお勧めします。詳細は、こちらを参照してください。資格のある学生の皆様は、Heroku for GitHub Students プログラムを通じてプラットフォームクレジットを申請できます。
Heroku でアプリを作成して、ソースコードを受け取るプラットフォームを準備します。
$ heroku create
Creating app... done, ⬢ polar-inlet-4930
http://polar-inlet-4930.herokuapp.com/ | https://git.heroku.com/polar-inlet-4930.git
アプリを作成すると、heroku
という名前の Git リモートリポジトリも作成され、ローカルの Git リポジトリと関連付けられます。Git リモートは、他のサーバー上で稼働するリポジトリのバージョンです。アプリに関連付けられた、Heroku でホストされる特別なリモートにコードをプッシュすることにより、アプリをデプロイします。
Heroku によってランダムなアプリ名 (このケースでは polar-inlet-4930
) が生成されます。独自のアプリ名を指定できます。
データベースをプロビジョニングする
サンプル Rails アプリにはデータベースが必要です。Elements Marketplace から入手可能なアドオンの 1 つである Heroku Postgres データベースをプロビジョニングします。アドオンは、ログ記録、モニタリング、データベースなど、アプリケーションですぐに使える追加サービスを提供するクラウドサービスです。
essential-0
Postgres のサイズのコストは月額 5 ドルで、分単位で課金されます。このチュートリアルの最後で、データベースを削除して、コストを最小限に抑えるように求められます。
$ heroku addons:create heroku-postgresql:essential-0
Creating heroku-postgresql:essential-0 on ⬢ polar-inlet-4930... ~$0.007/hour (max $5/month)
Database should be available soon
postgresql-encircled-75487 is being created in the background. The app will restart when complete...
Use heroku addons:info postgresql-encircled-75487 to check creation progress
Use heroku addons:docs heroku-postgresql to view documentation
Heroku アプリでこの Postgres データベースにアクセスできるようになりました。DATABASE_URL
環境変数は、規約によって Rails が接続する資格情報を格納します。addons
コマンドを使用して、プロビジョニングされたすべてのアドオンを確認できます。
$ heroku addons
Add-on Plan Price State
────────────────────────────────────────────── ─────────── ──────── ───────
heroku-postgresql (postgresql-encircled-75487) essential-0 $5/month created
└─ as DATABASE
The table above shows add-ons and the attachments to the current app (polar-inlet-4930) or other apps.
アプリをデプロイする
dyno を使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。コストを抑制するために、完了したらすぐにアプリを削除してください。
コードをデプロイします。このコマンドは、サンプルリポジトリの main
ブランチを heroku
リモートにプッシュし、次に Heroku にデプロイします。
$ git push heroku main
Enumerating objects: 524, done.
Counting objects: 100% (524/524), done.
Delta compression using up to 16 threads
Compressing objects: 100% (284/284), done.
Writing objects: 100% (524/524), 127.49 KiB | 63.75 MiB/s, done.
Total 524 (delta 210), reused 523 (delta 210), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Determining which buildpack to use for this app
remote: ! Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
remote: Detected buildpacks: Ruby,Node.js
remote: See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order
remote: -----> Ruby app detected
remote: -----> Installing bundler 2.3.25
remote: -----> Removing BUNDLED WITH version in the Gemfile.lock
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-3.2.4
remote: -----> Installing dependencies using bundler 2.5.6
remote: Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
...
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
...
remote: Asset precompilation completed (1.93s)
remote: Cleaning assets
remote: Running: rake assets:clean
remote: -----> Detecting rails configuration
remote:
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote: Default types for buildpack -> console, rake
remote:
remote: -----> Compressing...
remote: Done: 82.1M
remote: -----> Launching...
remote: Released v6
remote: https://polar-inlet-4930.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/polar-inlet-4930.git
* [new branch] main -> main
アプリケーションがデプロイされました。
ログに示されている URL でアプリにアクセスします。 次のショートカットを使って、Web サイトを簡単に開くこともできます。
$ heroku open
ログを表示する
Heroku では、すべてのアプリと Heroku のコンポーネントの出力ストリームから集約した時系列イベントのストリームとして、ログが扱われます。Heroku は、すべてのイベントに単一のストリームを提供します。
実行中のアプリに関する情報を表示するには、ログコマンドの 1 つである、heroku logs --tail
を使います。
$ heroku logs --tail
2023-03-01T20:35:41.251666+00:00 heroku[web.1]: Starting process with command `bundle exec puma -C config/puma.rb`
2023-03-01T20:35:42.338830+00:00 app[web.1]: [2] Puma starting in cluster mode...
2023-03-01T20:35:42.338853+00:00 app[web.1]: [2] * Puma version: 6.4.2 (ruby 3.2.4-p170) ("The Eagle of Durango")
2023-03-01T20:35:42.338854+00:00 app[web.1]: [2] * Min threads: 5
2023-03-01T20:35:42.338877+00:00 app[web.1]: [2] * Max threads: 5
2023-03-01T20:35:42.338888+00:00 app[web.1]: [2] * Environment: production
2023-03-01T20:35:42.338908+00:00 app[web.1]: [2] * Master PID: 2
2023-03-01T20:35:42.338925+00:00 app[web.1]: [2] * Workers: 2
2023-03-01T20:35:42.338951+00:00 app[web.1]: [2] * Restarts: (✔) hot (✖) phased
2023-03-01T20:35:42.338968+00:00 app[web.1]: [2] * Preloading application
2023-03-01T20:35:45.603105+00:00 app[web.1]: [2] * Listening on http://0.0.0.0:41385
2023-03-01T20:35:45.603195+00:00 app[web.1]: [2] Use Ctrl-C to stop
2023-03-01T20:35:45.610050+00:00 app[web.1]: [2] - Worker 0 (PID: 6) booted in 0.0s, phase: 0
2023-03-01T20:35:45.610915+00:00 app[web.1]: [2] - Worker 1 (PID: 9) booted in 0.0s, phase: 0
2023-03-01T20:35:45.758375+00:00 heroku[web.1]: State changed from starting to up
さらに他の生成されたログメッセージを表示するには、まずブラウザでアプリケーションにアクセスします。
ログのストリーム出力を停止するには、Control+C
を押します。
アプリをスケールする
サンプルアプリをデプロイすると、1 つの Web dyno で自動的に実行されます。 dyno とは、Procfile
で指定されているコマンドを実行する軽量のコンテナのようなものです。
実行されている dyno の数を確認するには、ps
コマンドを使います。
$ heroku ps
=== web (Eco): `bundle exec puma -C config/puma.rb`
web.1: up 2023/03/01 11:28:21 (~ 4m ago)
Heroku でアプリケーションをスケールするとは、実行中の dyno の数を変更することを意味します。 Web dyno の数を 0 にスケールしてみます。
$ heroku ps:scale web=0
ブラウザで更新ボタンを押して再度アプリにアクセスするか、heroku open
コマンドを使って Web タブで開きます。 リクエストに応答できる Web dyno がないので、エラーメッセージが表示されます。
もう一度スケールしてみましょう。
$ heroku ps:scale web=1
Eco にサブスクライブしている場合、アプリではデフォルトで Eco dyno が使用されます。それ以外の場合は、デフォルトで Basic dyno が使用されます。Eco dyno プランは、アカウントのすべての Eco dyno 間で共有され、多数の小さなアプリを Heroku にデプロイする場合にお勧めします。Eco dyno は 30 分間トラフィックを何も受信しないとスリープします。 このスリープ動作により、スリープ解除した最初のリクエストで数秒の遅延が発生します。Eco dyno は、月ごとに割り当てられるアカウント別の Eco dyno 時間を消費します。割り当て時間が残っている限り、アプリは稼働し続けます。
dyno がスリープしないようにするには、「dyno タイプ」の記事で紹介されている Basic 以上の dyno タイプにアップグレードします。少なくとも Standard dyno にアップグレードすることで、プロセスタイプあたり複数の dyno にスケールアップできます。
アプリの依存関係を宣言する
Heroku では、アプリのルートディレクトリに Gemfile
ファイルがあると、そのアプリを Ruby アプリと認識します。
デプロイしたデモ用アプリには、事前に次のような Gemfile
が用意されています。
source 'https://rubygems.org'
ruby '>= 3.1', '< 3.4'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 7.0.4.2'
# Use postgresql as the database for Active Record
gem 'pg', '~> 1.3.5'
# Use SCSS for stylesheets
gem 'sass-rails'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier'
...
Gemfile
ファイルは、アプリケーションと一緒にインストールする依存関係を指定します。このファイルでは、Heroku でアプリケーションを実行するときに使用される Ruby のバージョンも決定します。
アプリをデプロイすると、Heroku がこのファイルを読み出し、bundle install
コマンドを使って適切なバージョンの Ruby と依存関係をインストールします。
アプリをローカルで実行するには、依存関係もローカルでインストールする必要があります。この Gemfile 依存関係 pg
は、Postgres をローカルでインストールしている場合にのみ解決されます。 先に進む前に Postgres をインストールします。
コマンド which psql
で、コマンドラインに何らかの値が返された場合は、Postgres がローカルでインストールされています。
$ which psql
/usr/local/bin/psql
ローカルディレクトリで bundle install
を実行して依存関係をインストールし、アプリをローカルで実行できるようにシステムを準備します。
$ bundle install
Using rake 13.0.6
Using concurrent-ruby 1.2.2
Using i18n 1.12.0
....
Using turbolinks 5.2.1
Using uglifier 4.2.0
Your bundle is complete!
依存関係がインストールされたら、アプリをローカルで実行できます。
アプリをローカルで実行する
お使いの開発環境でアプリをローカル実行するには、若干の作業が必要です。
サンプルアプリはデータベースを使用するので、rake
タスクを使って適切なデータベースとテーブルをローカルで作成する必要があります。
$ bundle exec rake db:create db:migrate
== 20140707111715 CreateWidgets: migrating ====================================
-- create_table(:widgets)
-> 0.0076s
== 20140707111715 CreateWidgets: migrated (0.0077s) ===========================
heroku local
コマンドを使ってアプリケーションをローカルで起動します。このコマンドは、Heroku CLI の一部です。
$ heroku local web --port=5001
[OKAY] Loaded ENV .env File as KEY=VALUE Format
2:48:23 PM web.1 | [69541] Puma starting in cluster mode...
2:48:23 PM web.1 | [69541] * Puma version: 6.4.2 (ruby 3.2.4-p170) ("The Eagle of Durango")
2:48:23 PM web.1 | [69541] * Min threads: 5
2:48:23 PM web.1 | [69541] * Max threads: 5
2:48:23 PM web.1 | [69541] * Environment: development
2:48:23 PM web.1 | [69541] * Master PID: 69541
2:48:23 PM web.1 | [69541] * Workers: 2
2:48:23 PM web.1 | [69541] * Restarts: (✔) hot (✖) phased
2:48:23 PM web.1 | [69541] * Preloading application
2:48:24 PM web.1 | [69541] * Listening on http://0.0.0.0:5001
2:48:24 PM web.1 | [69541] Use Ctrl-C to stop
2:48:24 PM web.1 | [69541] - Worker 0 (PID: 69543) booted in 0.19s, phase: 0
2:48:24 PM web.1 | [69541] - Worker 1 (PID: 69545) booted in 0.19s, phase: 0
Heroku と同じように、heroku local
は Procfile
を使用して実行するコマンドを認識します。
アプリケーションがローカルで実行していることを確認するには、Web ブラウザで「http://localhost:5001」を開きます。
アプリのローカル実行を停止するには、CLI で Control + C
を押して終了します。
ローカルの変更をプッシュする
このステップでは、アプリケーションへのローカルでの変更を Heroku に反映させます。
Gemfile
を編集して、cowsay
gem の依存関係を追加します。
source 'https://rubygems.org'
ruby '>= 3.1', '< 3.4'
gem "cowsay"
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 7.0.4.2'
...
この gem を使用するように app/views/welcome/index.erb
を変更します。ファイルの最初の数行を次のように変更します。
<pre><%= Cowsay.say("Hello", "tux") %></pre>
...
ローカルでテストします。
$ bundle install
$ heroku local --port=5001
「http://localhost:5001」でアプリケーションにアクセスすると、変更が機能すると、ASCII アートが表示されます。
次は、このローカルの変更を Heroku にデプロイします。
Heroku へのデプロイは、ほとんどの場合、このパターンで行います。 まず、変更したファイルをローカルの Git リポジトリに追加します。
$ git add .
次に、変更内容をリポジトリにコミットします。
$ git commit -m "Added cowsay gem"
次に、以前と同じようにデプロイします。
$ git push heroku main
最後に、すべて正常に動作しているかどうかを確認します。
$ heroku open
ログ記録アドオンをプロビジョニングする
データベース以外に、アドオンはアプリケーションに多くの追加のサービスを提供します。このステップでは、アプリのログを保存する無料のアドオンをプロビジョニングします。
Heroku では、デフォルトで 1500 行のアプリケーションログが記録されますが、完全なログストリームはサービスとして提供されています。複数のアドオンプロバイダーが、ログの永続化、検索、メールや SMS 通知などの機能を提供するログサービスを用意しています。
このステップでは、このようなログ関連アドオンの 1 つである、Papertrail をプロビジョニングします。
Papertrail ログ記録アドオンをプロビジョニングします。
$ heroku addons:create papertrail
Adding papertrail on polar-inlet-4930... done, v11 (free)
Welcome to Papertrail. Questions and ideas are welcome (support@papertrailapp.com). Happy logging!
Use `heroku addons:docs papertrail` to view documentation.
アドオンがデプロイされ、アプリケーション用に設定されました。 アプリのアドオンは、次のコマンドで一覧表示できます。
$ heroku addons
このアドオンが動作していることを確認するため、アプリケーションの Heroku URL に数回アクセスします。アクセスするたびにログメッセージが生成され、Papertrail のアドオンに送られます。 Papertrail のコンソールにアクセスし、ログメッセージを確認します。
$ heroku addons:open papertrail
ブラウザで Papertrail の Web コンソールが開き、最新のログイベントが表示されます。このインターフェースでは、検索したり通知を設定したりできます。
コンソールを起動する
One-off dyno で、heroku run
コマンドを使ってコマンド (通常はアプリの一部を構成するスクリプトやアプリケーション) を実行できます。アプリの環境で試行するためにローカルターミナルにアタッチされた REPL プロセスを起動することもできます。
$ heroku run rails console
Running rails console on ⬢ polar-inlet-4930... up, run.1360 (Eco)
Loading production environment (Rails 7.0.4.2)
irb(main):001:0>
Error connecting to process
というエラーが表示された場合は、ファイアウォールを設定します。
コンソールが起動すると、アプリ全体が読み込まれます。たとえば、puts Cowsay.say("hi", "Cow")
と入力すると「hi」という吹き出しの付いた動物が表示されます。コンソールを終了するには、exit
と入力します。
irb(main):001:0> puts Cowsay.say("hi", "tux")
____
| hi |
----
\
\
.--.
|o_o |
|:_/ |
// \ \
(| | )
/'\_ _/`\
\___)=(___/
=> nil
irb(main):002:0> exit
別の例を試してみましょう。別の One-off dyno を作成し、bash
コマンドを実行して、その dyno でシェルを開きます。シェルが開いたら、そこでコマンドを実行できます。それぞれの dyno には専用の一時的ファイル領域があり、アプリとその依存関係が入力されています。コマンドが完了したら (このケースでは bash
)、dyno が終了します。:
$ heroku run bash
Running bash on ⬢ polar-inlet-4930... up, run.6847 (Eco)
~ $ ls
app app.json bin config config.ru db Gemfile Gemfile.lock lib log package.json Procfile public Rakefile README.md test tmp vendor
~ $ exit
exit
必ず exit
と入力してシェルを閉じ、dyno を終了してください。
環境設定を定義する
Heroku では、暗号鍵や外部リソースのアドレスなどのデータを環境設定に保存して、設定を外部に置くことができます。
環境設定は、ランタイムに環境変数としてアプリケーションに提供されます。 例として、app/views/welcome/index.erb
を編集し、環境変数 TIMES
の値に応じてあるアクションを繰り返し実行するメソッドを追加します。 ファイルの最初の数行を次のように変更します。
<% for i in 0..(ENV['TIMES'] ? ENV['TIMES'].to_i : 2) do %>
<p>Hello World #<%= i %>!</p>
<% end %>
heroku local
は、ローカルディレクトリにある .env
ファイルの内容に応じて、環境を自動的に設定します。 サンプルプロジェクトのトップレベルディレクトリにはすでに .env
ファイルがあり、以下の行が含まれています。
TIMES=10
heroku local --port=5001
でアプリを実行すると、「Hello World」というテキストが 10 回表示されます。
Heroku で環境設定を設定するには、次のコマンドを実行します。
$ heroku config:set TIMES=10
heroku config
を使用して、アプリの環境設定を表示します。
$ heroku config
== polar-inlet-4930 Config Vars
PAPERTRAIL_API_TOKEN: erdKhPeeeehIcdfY7ne
TIMES: 10
...
このアクションの変更を確認するには、変更したアプリケーションを Heroku にデプロイします。
データベースを使う
アプリの環境設定を一覧表示すると、アプリがデータベースに接続するときに使用する URL (DATABASE_URL
) が表示されます。
$ heroku config
=== polar-inlet-4930 Config Vars
DATABASE_URL: postgres://xx:yyy@host:5432/d8slm9t7b5mjnd
HEROKU_POSTGRESQL_BROWN_URL: postgres://xx:yyy@host:5432/d8slm9t7b5mjnd
...
Heroku には、さらに詳細を表示する pg
コマンドもあります。
$ heroku pg
=== DATABASE_URL
Plan: Essential 0
Status: Available
Connections: 0/20
PG Version: 15.5
Created: 2024-05-01 13:22 UTC
Data Size: 7.61 MB / 1 GB (0.74%) (In compliance)
Tables: 3
Fork/Follow: Unsupported
Rollback: Unsupported
Continuous Protection: Off
Add-on: postgresql-elliptical-30581
この情報は、essential-0
データベースが Postgres v15.5 を実行しており、3 つのテーブルがあることを示しています。
デプロイしたサンプルアプリにはデータベース機能が備わっています。それには、アプリの「/widgets」ページで使用されるウィジェットのコントローラーとデータベースモデルがあります。アプリの URL に「/widgets」を追加して、このページにアクセスできます。
その URL にアクセスすると、エラーページが表示されます。heroku logs
を使用するか、または Papertrail でエラーメッセージを確認すると、次のようになっています。
2014-07-08T14:52:37.884178+00:00 app[web.1]: Started GET "/widgets" for 94.174.204.242 at 2014-07-08 14:52:37 +0000
2014-07-08T14:52:38.162312+00:00 heroku[router]: at=info method=GET path="/widgets" host=fox828228.herokuapp.com request_id=3755bb46-4de2-4434-a13a-26ec73e53694 fwd="94.174.204.242" dyno=web.1 connect=0 service=294 status=500 bytes=955
2014-07-08T14:52:38.078295+00:00 app[web.1]: Processing by WidgetsController#index as HTML
....
2014-07-08T14:52:38.146062+00:00 app[web.1]: PG::UndefinedTable: ERROR: relation "widgets" does not exist
このエラーは、データベースへの接続は成功したものの、widgets
テーブルが見つからなかったことがわかります。 rake db:migrate
を実行して、そのエラーを解決できます。 Heroku でこのコマンドを実行するには、次のように One-off dynoで実行します。
$ heroku run rake db:migrate
Running `rake db:migrate` attached to terminal... up, run.3559
Migrating to CreateWidgets (20140707111715)
== 20140707111715 CreateWidgets: migrating ====================================
-- create_table(:widgets)
-> 0.0244s
== 20140707111715 CreateWidgets: migrated (0.0247s) ===========================
ここで、アプリの /widgets
ページにもう一度アクセスすると、ウィジェットのレコードを一覧表示して、作成できます。
Postgres がローカルでインストールされている場合、データベースと直接対話することもできます。たとえば、次のように psql
を使ってデータベースに接続し、クエリを実行できます。
$ heroku pg:psql
d8slm9t7b5mjnd=> select * from widgets;
id | name | description | stock | created_at | updated_at
----+-----------+--------------+-------+----------------------------+----------------------------
1 | My Widget | It's amazing | 100 | 2023-03-01 21:04:39.029311 | 2023-03-01 21:04:39.029311
(1 row)
詳細は、「Heroku PostgreSQL」を参照してください。
次のステップ
ここまで、アプリのデプロイ、アプリの設定変更、ログの表示、スケール、アドオンのアタッチを行う方法を説明しました。
次にお勧めするリソースを紹介します。
- 「Heroku の仕組み」では、アプリケーションの作成、設定、デプロイ、および実行時に必要な技術的な概念の概要を紹介しています。
- Ruby アプリケーションの開発とデプロイの詳細については、Ruby サポートカテゴリを参照してください。
- 「Heroku スターターガイド (Rails 7.x)」では、Rails アプリのデプロイについて詳しく説明しています。
コストを抑制するために、チュートリアルを完了したらすぐにサンプルアプリを削除し、データベースも削除してください。
アプリとアドオンを削除する
アカウントからアプリとデータベースを削除します。使用したリソースに対してのみ課金されます。
この操作により、アドオンとデータベースに保存されたすべてのデータが削除されます。
$ heroku addons:destroy heroku-postgresql
▸ WARNING: Destructive Action
▸ This command will affect the app polar-inlet-4930
▸ To proceed, type polar-inlet-4930 or re-run this command with
▸ --confirm polar-inlet-4930
>
この操作により、アプリケーションが完全に削除されます。
$ heroku apps:destroy
▸ WARNING: This will delete ⬢ polar-inlet-4930 including all add-ons.
▸ To proceed, type polar-inlet-4930 or re-run this command with
▸ --confirm polar-inlet-4930
>
以下のコマンドによって、アドオンとアプリが消去されたことを確認できます。
$ heroku addons --all
$ heroku apps --all
これで、アプリをデプロイする準備ができました。または Rails アプリのデプロイについて詳しく知るには、「Heroku スターターガイド (Rails 7.x)」を参照してください。