Heroku スターターガイド (Rails 7.x)
最終更新日 2023年06月01日(木)
Table of Contents
Ruby on Rails は、Ruby で記述され、広く使われている Web フレームワークです。このガイドでは、Heroku での Rails 7 の使用について説明します。Heroku での旧バージョンの Rails の実行については、Rails 6.x または Rails 5.x に関するチュートリアルを参照してください。
このチュートリアルでは、以下が用意されていることを前提としています。
- Ruby、Ruby on Rails、および Git に関する基本的な知識
- Ruby 3.0.0+、Rubygems、Bundler、Rails 7 のローカルにインストールされたバージョン+
- Heroku CLI のローカルにインストールされたバージョン
- 確認済みの Heroku アカウント
- Eco dyno プランのサブスクリプション (推奨)
dyno とデータベースを使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。低料金プランを使用してこのチュートリアルを完了することをお勧めします。資格のある学生の皆様は、新しい Heroku for GitHub Students プログラムを通じてプラットフォームクレジットを申請できます。
ローカルの設定
Heroku CLI のインストール後、ターミナルからログインします。
$ 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 developer@example.com
このコマンドにより、Web ブラウザで Heroku ログインページが開きます。ブラウザですでに Heroku にログインしている場合は、ページの Log in
(ログイン) ボタンをクリックします。
この認証は、heroku
と git
コマンドが正常に動作するために必要な操作です。
外部の HTTP/HTTPS サービスへの接続にプロキシを使用するファイアウォールを利用している場合は、heroku
コマンドを実行する前に、ローカルの開発環境で HTTP_PROXY
または HTTPS_PROXY
環境変数を設定してください。
新しい Rails アプリの作成または既存の Rails アプリのアップグレード
アプリを作成する前に、rails -v
を実行して、Rails 7 がインストールされていることを確認します。必要に応じて、gem install
を使用して Rails 7 をインストールします。
$ gem install rails --no-document
Successfully installed rails-7.0.5
1 gem installed
Rails アプリを作成します。
$ rails new myapp --database=postgresql
アプリケーションディレクトリに移動し、Gemfile.lock
に x86_64-linux
および ruby
プラットフォームを追加します。
$ cd myapp
$ bundle lock --add-platform x86_64-linux --add-platform ruby
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Writing lockfile to ./myapp/Gemfile.lock
ローカルデータベースを作成します。
$ bin/rails db:create
Database 'myapp_development' already exists
Database 'myapp_test' already exists
pg gem の追加
--database=postgresql
が定義されていない新規または既存のアプリの場合は、Gemfile
内に sqlite3
gem が存在しないことを確認します。pg
gem を所定の位置に追加します。
Gemfile
内で、次の行を削除します。
gem 'sqlite3'
これを次の行に置き換えます。
gem 'pg'
開発中は PostgreSQL をローカルで使用することを強くお勧めします。開発環境とデプロイ環境の間の同等性を維持することにより、環境の違いによる微妙なバグが取り込まれることを防ぎます。
Postgres をローカルにインストールします。Sqlite3 の代わりに Postgres が推奨される理由についての詳細は、Sqlite3 が Heroku と互換性がない理由を参照してください。
Gemfile
が更新されたら、依存関係を再インストールします。
$ bundle install
インストールによって、Gemfile.lock
も変更を含めて更新されます。
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 } %>
development:
<<: *default
database: myapp_development
# The specified database role being used to connect to postgres.
# To create additional roles in postgres see `$ createuser --help`.
# When left blank, postgres will use the default role. This is
# the same name as the operating system user running Rails.
#username: myapp
# The password associated with the postgres role (username).
#password:
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
#host: localhost
# The TCP port the server listens on. Defaults to 5432.
# If your server runs on a different port number, change accordingly.
#port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# Defaults to warning.
#min_messages: notice
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: myapp_test
# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password or a full connection URL as an environment
# variable when you boot the app. For example:
#
# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
#
# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
# production:
# url: <%= ENV["MY_APP_DATABASE_URL"] %>
#
# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full overview on how database connection configuration can be specified.
#
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>
ここで注意点があります。adapter
の値が postgres
で、postgresql
でない場合、アプリケーションは機能しません。
ウェルカムページの作成
Rails 7 の本番環境には、デフォルトで静的なインデックスページがありません。Rails 7 にアップグレードされたアプリでは既存のページ設定が保持されますが、新しい Rails 7 アプリでは、自動的にウェルカムページが生成されません。ホームページを保持するための welcome
コントローラーを作成します。
$ rails generate controller welcome
app/views/welcome/index.html.erb
を作成し、次のスニペットを追加します。
ファイル app/views/welcome/index.html.erb
で、以下のように記述します。
<h2>Hello World</h2>
<p>
The time is now: <%= Time.now %>
</p>
ウェルカムページが作成されたら、このアクションにマッピングするためのルートを作成します。config/routes.rb
を編集して、インデックスページを新しいメソッドに設定します。
ファイル config/routes.rb
の 2 行目に以下を追加します。
root 'welcome#index'
Rails Web サーバーを起動して、ページが表示されることを確認します。
$ rails server
ブラウザで http://localhost:3000 にアクセスします。ページが表示されない場合は、ログを参照して、エラーをデバッグします。Rails によって、rails server
が起動した同じターミナルにログが出力されます。
Ruby バージョンの指定
Rails 7 では、Ruby 2.7.0 以上が必要です。Heroku は、デフォルトでは最新バージョンの Ruby をインストールします。Gemfile
で ruby
DSL を使用して、特定のバージョンを指定します。たとえば、次のようになります。
ruby "3.1.4"
常にローカルでも同じバージョンの Ruby を使用します。ruby -v
を使用して ruby のローカルバージョンを確認します。特定の Ruby バージョンの定義についての詳細は、「Ruby のバージョン」の記事を参照してください。
Procfile の作成
Procfile は、アプリケーションのルートディレクトリにあるテキストファイルです。このファイルを使って、アプリの起動時に実行するコマンドを明示的に宣言します。
この Procfile では、単一のプロセスタイプの web
と、その実行に必要なコマンドを宣言しています。 ここでは、web
という名前が重要です。 これは、このプロセスタイプを Heroku の HTTP ルーティングスタックにアタッチし、デプロイ後に Web トラフィックを受信することを宣言しています。
デフォルトでは、Rails アプリの Web プロセスは、Rails 7 で Puma を使用する rails server
を実行します。Procfile を使用せずに Rails 7 アプリケーションをデプロイすると、このコマンドが実行されます。ただし、Procfile を介してサーバープロセスを起動する方法を明示的に宣言することをお勧めします。たとえば、次のようになります。
ファイル Procfile
で、以下のように記述します。
web: bundle exec puma -C config/puma.rb
Procfile
ファイル名は大文字と小文字が区別されます。ファイル拡張子はありません。
config/puma.rb
が存在しない場合は、最大のパフォーマンスを得るために、Heroku の Puma ドキュメントを使用して作成してください。
Procfile には追加のプロセスタイプを含めることができます。 たとえば、キューからアイテムを取り出して処理するバックグラウンドワーカープロセスを宣言できます。
Git でのアプリの保存
Heroku では、アプリケーションのデプロイを分散型ソース管理ツールである Git に依存しています。アプリケーションがまだ Git に存在しない場合は、まず git --help
を使用して 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
の場合、Git をインストールします。
Rails アプリのルートディレクトリに移動します。ls
コマンドを使用して、その内容を確認します。
$ ls
Gemfile
Gemfile-e
Gemfile.lock
Procfile
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
を使用して、すべてが正しくコミットされたことを確認します。
$ git status
On branch main
nothing to commit, working tree clean
アプリケーションが Git にコミットされたら、Heroku にデプロイする準備ができています。
Heroku アプリの作成
Heroku でアプリを作成するには、Rails アプリのルートディレクトリ内で Heroku CLI を使用します。
$ heroku apps:create
Creating app... done, shrouded-shore-72271
https://shrouded-shore-72271.herokuapp.com/ | https://git.heroku.com/shrouded-shore-72271.git
アプリを作成すると、heroku
という名前の Git リモートリポジトリも作成され、ローカルの Git リポジトリと関連付けられます。Git リモートは、他のサーバー上で稼働するリポジトリのバージョンです。アプリに関連付けられた、Heroku でホストされる特別なリモートにコードをプッシュすることにより、アプリをデプロイします。git config
でリモートが 設定されていることを確認します。
$ git config --list --local | grep heroku
remote.heroku.url=https://git.heroku.com/shrouded-shore-72271.git
remote.heroku.fetch=+refs/heads/*:refs/remotes/heroku/*
現在のディレクトリが正しくないか、または Git が初期化されていない場合、Git は fatal: not in a git directory
を返します。Git がリモートの一覧を返した場合は、デプロイする準備ができています。
業界での変更に従い、Heroku ではデフォルトのブランチ名を main
に更新しました。プロジェクトでデフォルトのブランチ名として master
を使用している場合は、git push heroku master
を使用してください。
データベースのプロビジョニング
Elements Marketplace から入手可能なアドオンの 1 つである Heroku Postgres データベースをプロビジョニングします。アドオンは、ログ記録、モニタリング、データベースなど、アプリケーションですぐに使える追加サービスを提供するクラウドサービスです。
mini
Postgres のサイズのコストは月額 5 ドルで、分単位で課金されます。このチュートリアルの最後で、データベースを削除して、コストを最小限に抑えるように求められます。
$ heroku addons:create heroku-postgresql:mini
Creating heroku-postgresql:mini on shrouded-shore-72271... $5/month
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-concave-07363 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation
Heroku アプリでこの Postgres データベースにアクセスできるようになりました。DATABASE_URL
環境変数は、規約によって Rails が接続する資格情報を格納します。
Heroku へのアプリのデプロイ
dyno を使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。コストを抑制するために、完了したらすぐにアプリを削除してください。
コードをデプロイします。このコマンドは、サンプルリポジトリの main
ブランチを heroku
リモートにプッシュし、次に Heroku にデプロイします。
$ git push heroku main
remote: Updated 84 paths from 8cde8b0
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: -----> 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.1.4
remote: -----> Installing dependencies using bundler 2.3.25
remote: Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
remote: Fetching gem metadata from https://rubygems.org/..........
remote: Fetching rake 13.0.6
remote: Installing rake 13.0.6
remote: Fetching erubi 1.12.0
remote: Fetching minitest 5.18.0
remote: Fetching builder 3.2.4
remote: Fetching concurrent-ruby 1.2.2
remote: Installing erubi 1.12.0
remote: Installing concurrent-ruby 1.2.2
remote: Installing builder 3.2.4
remote: Installing minitest 5.18.0
remote: Fetching mini_portile2 2.8.2
remote: Fetching racc 1.6.2
remote: Fetching crass 1.0.6
remote: Installing mini_portile2 2.8.2
remote: Installing crass 1.0.6
remote: Fetching rack 2.2.7
remote: Installing racc 1.6.2 with native extensions
remote: Fetching nio4r 2.5.9
remote: Fetching websocket-extensions 0.1.5
remote: Installing rack 2.2.7
remote: Installing nio4r 2.5.9 with native extensions
remote: Installing websocket-extensions 0.1.5
remote: Fetching marcel 1.0.2
remote: Fetching mini_mime 1.1.2
remote: Installing marcel 1.0.2
remote: Installing mini_mime 1.1.2
remote: Fetching date 3.3.3
remote: Fetching timeout 0.3.2
remote: Installing date 3.3.3 with native extensions
remote: Installing timeout 0.3.2
remote: Fetching msgpack 1.7.1
remote: Installing msgpack 1.7.1 with native extensions
remote: Using bundler 2.3.26
remote: Fetching method_source 1.0.0
remote: Installing method_source 1.0.0
remote: Fetching thor 1.2.2
remote: Installing thor 1.2.2
remote: Fetching zeitwerk 2.6.8
remote: Installing zeitwerk 2.6.8
remote: Fetching pg 1.5.3
remote: Installing pg 1.5.3 with native extensions
remote: Fetching redis 4.8.1
remote: Installing redis 4.8.1
remote: Fetching i18n 1.13.0
remote: Installing i18n 1.13.0
remote: Fetching tzinfo 2.0.6
remote: Installing tzinfo 2.0.6
remote: Fetching websocket-driver 0.7.5
remote: Installing websocket-driver 0.7.5 with native extensions
remote: Fetching rack-test 2.1.0
remote: Installing rack-test 2.1.0
remote: Fetching sprockets 4.2.0
remote: Installing sprockets 4.2.0
remote: Fetching net-protocol 0.2.1
remote: Installing net-protocol 0.2.1
remote: Fetching nokogiri 1.15.2
remote: Installing nokogiri 1.15.2 with native extensions
remote: Fetching puma 5.6.5
remote: Installing puma 5.6.5 with native extensions
remote: Fetching activesupport 7.0.5
remote: Fetching net-pop 0.1.2
remote: Installing activesupport 7.0.5
remote: Installing net-pop 0.1.2
remote: Fetching net-smtp 0.3.3
remote: Installing net-smtp 0.3.3
remote: Fetching bootsnap 1.16.0
remote: Installing bootsnap 1.16.0 with native extensions
remote: Fetching net-imap 0.3.4
remote: Installing net-imap 0.3.4
remote: Fetching globalid 1.1.0
remote: Installing globalid 1.1.0
remote: Fetching activemodel 7.0.5
remote: Installing activemodel 7.0.5
remote: Fetching mail 2.8.1
remote: Installing mail 2.8.1
remote: Fetching activejob 7.0.5
remote: Installing activejob 7.0.5
remote: Fetching activerecord 7.0.5
remote: Installing activerecord 7.0.5
remote: Fetching rails-dom-testing 2.0.3
remote: Fetching loofah 2.21.3
remote: Installing rails-dom-testing 2.0.3
remote: Installing loofah 2.21.3
remote: Fetching rails-html-sanitizer 1.6.0
remote: Installing rails-html-sanitizer 1.6.0
remote: Fetching actionview 7.0.5
remote: Installing actionview 7.0.5
remote: Fetching actionpack 7.0.5
remote: Fetching jbuilder 2.11.5
remote: Installing jbuilder 2.11.5
remote: Installing actionpack 7.0.5
remote: Fetching actioncable 7.0.5
remote: Fetching activestorage 7.0.5
remote: Fetching actionmailer 7.0.5
remote: Fetching railties 7.0.5
remote: Installing actionmailer 7.0.5
remote: Fetching sprockets-rails 3.4.2
remote: Installing actioncable 7.0.5
remote: Installing activestorage 7.0.5
remote: Installing sprockets-rails 3.4.2
remote: Installing railties 7.0.5
remote: Fetching actionmailbox 7.0.5
remote: Fetching actiontext 7.0.5
remote: Installing actiontext 7.0.5
remote: Installing actionmailbox 7.0.5
remote: Fetching importmap-rails 1.1.6
remote: Fetching rails 7.0.5
remote: Fetching turbo-rails 1.4.0
remote: Fetching stimulus-rails 1.2.1
remote: Installing stimulus-rails 1.2.1
remote: Installing rails 7.0.5
remote: Installing importmap-rails 1.1.6
remote: Installing turbo-rails 1.4.0
remote: Bundle complete! 16 Gemfile dependencies, 57 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 (35.15s)
remote: Cleaning up the bundler cache.
remote: -----> Detecting rake tasks
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: I, [2023-06-01T19:40:54.574690 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/manifest-b84bfa46a33d7f0dc4d2e7b8889486c9a957a5e40713d58f54be71b66954a1ff.js
remote: I, [2023-06-01T19:40:54.574863 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/manifest-b84bfa46a33d7f0dc4d2e7b8889486c9a957a5e40713d58f54be71b66954a1ff.js.gz
remote: I, [2023-06-01T19:40:54.575001 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/application-e0cf9d8fcb18bf7f909d8d91a5e78499f82ac29523d475bf3a9ab265d5e2b451.css
remote: I, [2023-06-01T19:40:54.575076 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/application-e0cf9d8fcb18bf7f909d8d91a5e78499f82ac29523d475bf3a9ab265d5e2b451.css.gz
remote: I, [2023-06-01T19:40:54.575171 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/application-37f365cbecf1fa2810a8303f4b6571676fa1f9c56c248528bc14ddb857531b95.js
remote: I, [2023-06-01T19:40:54.575240 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/application-37f365cbecf1fa2810a8303f4b6571676fa1f9c56c248528bc14ddb857531b95.js.gz
remote: I, [2023-06-01T19:40:54.575332 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js
remote: I, [2023-06-01T19:40:54.575399 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js.gz
remote: I, [2023-06-01T19:40:54.575499 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js
remote: I, [2023-06-01T19:40:54.575575 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/controllers/hello_controller-549135e8e7c683a538c3d6d517339ba470fcfb79d62f738a0a089ba41851a554.js.gz
remote: I, [2023-06-01T19:40:54.575680 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js
remote: I, [2023-06-01T19:40:54.575749 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js.gz
remote: I, [2023-06-01T19:40:54.575844 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/turbo-4851a9a0b1d947e810dfd0448a72aef261d455183ebea681f4f28a73640a9ece.js
remote: I, [2023-06-01T19:40:54.575932 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/turbo-4851a9a0b1d947e810dfd0448a72aef261d455183ebea681f4f28a73640a9ece.js.gz
remote: I, [2023-06-01T19:40:54.576035 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/turbo.min-f309baafa3ae5ad6ccee3e7362118b87678d792db8e8ab466c4fa284dd3a4700.js
remote: I, [2023-06-01T19:40:54.576094 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/turbo.min-f309baafa3ae5ad6ccee3e7362118b87678d792db8e8ab466c4fa284dd3a4700.js.gz
remote: I, [2023-06-01T19:40:54.576183 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/turbo.min.js-8bc8f4a58d1c106d58dec8bef6c638ff12ff4d078f19d8ebd8c4277f4c9bc85a.map
remote: I, [2023-06-01T19:40:54.576278 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/turbo.min.js-8bc8f4a58d1c106d58dec8bef6c638ff12ff4d078f19d8ebd8c4277f4c9bc85a.map.gz
remote: I, [2023-06-01T19:40:54.576376 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/actiontext-28c61f5197c204db043317a8f8826a87ab31495b741f854d307ca36122deefce.js
remote: I, [2023-06-01T19:40:54.576452 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/actiontext-28c61f5197c204db043317a8f8826a87ab31495b741f854d307ca36122deefce.js.gz
remote: I, [2023-06-01T19:40:54.576577 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/trix-1563ff9c10f74e143b3ded40a8458497eaf2f87a648a5cbbfebdb7dec3447a5e.js
remote: I, [2023-06-01T19:40:54.576655 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/trix-1563ff9c10f74e143b3ded40a8458497eaf2f87a648a5cbbfebdb7dec3447a5e.js.gz
remote: I, [2023-06-01T19:40:54.577125 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/trix-ac629f94e04ee467ab73298a3496a4dfa33ca26a132f624dd5475381bc27bdc8.css
remote: I, [2023-06-01T19:40:54.577255 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/trix-ac629f94e04ee467ab73298a3496a4dfa33ca26a132f624dd5475381bc27bdc8.css.gz
remote: I, [2023-06-01T19:40:54.577405 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/es-module-shims-69d0cb4dc1d01c9dc2ed52f2ab66874fd545fe7e35c7841009b4e8c55f231dee.js
remote: I, [2023-06-01T19:40:54.577490 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/es-module-shims-69d0cb4dc1d01c9dc2ed52f2ab66874fd545fe7e35c7841009b4e8c55f231dee.js.gz
remote: I, [2023-06-01T19:40:54.577600 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js
remote: I, [2023-06-01T19:40:54.577702 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js.gz
remote: I, [2023-06-01T19:40:54.577812 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/es-module-shims.js-c69f1a5dd068dfc08a4cedc0ad77b792985bf256e162852bd03cdf764b666c4a.map
remote: I, [2023-06-01T19:40:54.577909 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/es-module-shims.js-c69f1a5dd068dfc08a4cedc0ad77b792985bf256e162852bd03cdf764b666c4a.map.gz
remote: I, [2023-06-01T19:40:54.578033 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-1bd52683afde5c8ff5572f5d49429cea5bf7744ca636fcb830c015d8cccf353e.js
remote: I, [2023-06-01T19:40:54.578109 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-1bd52683afde5c8ff5572f5d49429cea5bf7744ca636fcb830c015d8cccf353e.js.gz
remote: I, [2023-06-01T19:40:54.578235 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js
remote: I, [2023-06-01T19:40:54.578336 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js.gz
remote: I, [2023-06-01T19:40:54.578479 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-importmap-autoloader-db2076c783bf2dbee1226e2add52fef290b5d31b5bcd1edd999ac8a6dd31c44a.js
remote: I, [2023-06-01T19:40:54.578578 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-importmap-autoloader-db2076c783bf2dbee1226e2add52fef290b5d31b5bcd1edd999ac8a6dd31c44a.js.gz
remote: I, [2023-06-01T19:40:54.578690 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js
remote: I, [2023-06-01T19:40:54.578789 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js.gz
remote: I, [2023-06-01T19:40:54.578919 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus.min-d03cf1dff41d6c5698ec2c5d6a501615a7a33754dbeef8d1edd31c928d17c652.js
remote: I, [2023-06-01T19:40:54.579016 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus.min-d03cf1dff41d6c5698ec2c5d6a501615a7a33754dbeef8d1edd31c928d17c652.js.gz
remote: I, [2023-06-01T19:40:54.579144 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js
remote: I, [2023-06-01T19:40:54.579242 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js.gz
remote: I, [2023-06-01T19:40:54.579369 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-importmap-autoloader-db2076c783bf2dbee1226e2add52fef290b5d31b5bcd1edd999ac8a6dd31c44a.js
remote: I, [2023-06-01T19:40:54.579453 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-importmap-autoloader-db2076c783bf2dbee1226e2add52fef290b5d31b5bcd1edd999ac8a6dd31c44a.js.gz
remote: I, [2023-06-01T19:40:54.579594 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js
remote: I, [2023-06-01T19:40:54.579699 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js.gz
remote: I, [2023-06-01T19:40:54.579852 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus.min.js-0f3bbd3e2e72e4d7178153a52d180de4086e47082ecfc388ce82a90d8a3d7480.map
remote: I, [2023-06-01T19:40:54.579976 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/stimulus.min.js-0f3bbd3e2e72e4d7178153a52d180de4086e47082ecfc388ce82a90d8a3d7480.map.gz
remote: I, [2023-06-01T19:40:54.580090 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/activestorage-3ab61e47dd4ee2d79db525ade1dca2ede0ea2b7371fe587e408ee37b7ade265d.js
remote: I, [2023-06-01T19:40:54.580210 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/activestorage-3ab61e47dd4ee2d79db525ade1dca2ede0ea2b7371fe587e408ee37b7ade265d.js.gz
remote: I, [2023-06-01T19:40:54.580324 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/activestorage.esm-01f58a45d77495cdfbdfcc872902a430426c4391634ec9c3da5f69fbf8418492.js
remote: I, [2023-06-01T19:40:54.580592 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/activestorage.esm-01f58a45d77495cdfbdfcc872902a430426c4391634ec9c3da5f69fbf8418492.js.gz
remote: I, [2023-06-01T19:40:54.580747 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/actioncable-5433453f9b6619a9de91aaab2d7fc7ff183e5260c0107cbc9a1aa0c838d9a74e.js
remote: I, [2023-06-01T19:40:54.580853 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/actioncable-5433453f9b6619a9de91aaab2d7fc7ff183e5260c0107cbc9a1aa0c838d9a74e.js.gz
remote: I, [2023-06-01T19:40:54.581008 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/actioncable.esm-e01089c3ec4fe7817fa9abcad06cab6bdc387f95f0ca6aab4bf7ba7537f70690.js
remote: I, [2023-06-01T19:40:54.581094 #1290] INFO -- : Writing /tmp/build_807fa92e/public/assets/actioncable.esm-e01089c3ec4fe7817fa9abcad06cab6bdc387f95f0ca6aab4bf7ba7537f70690.js.gz
remote: Asset precompilation completed (0.99s)
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: 40.4M
remote: -----> Launching...
remote: ! The following add-ons were automatically provisioned: . These add-ons may incur additional cost, which is prorated to the second. Run `heroku addons` for more info.
remote: Released v6
remote: https://shrouded-shore-72271.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/shrouded-shore-72271.git
* [new branch] main -> main
出力に警告やエラーメッセージが表示された場合は、出力をチェックして、調整します。
デプロイが成功したら、必要に応じて以下のタスクを実行します。
- データベースの移行
- dyno のスケーリング
- 問題が発生した場合はアプリのログのチェック
データベースの移行
アプリケーションでデータベースを使用している場合は、Heroku CLI を使用して、One-off dyno を起動し、移行をトリガーします。One-off dyno で、heroku run
コマンドを使ってコマンド (通常はアプリの一部を構成するスクリプトやアプリケーション) を実行できます。次のコマンドでデータベース移行をトリガーできます。
$ heroku run rake db:migrate
代わりに対話型シェルを使用するには、heroku run bash
を実行できます。
アプリケーションのスケーリングとアクセス
Heroku は、定義されたプロセスとプロセスタイプを使用してアプリケーションコードを実行します。新しいアプリケーションでは、デフォルトでプロセスタイプがアクティブになりません。次のコマンドはアプリを最大 1 つの dyno にスケーリングし、web
プロセスを実行します。
$ heroku ps:scale web=1
Heroku CLI の ps
コマンドを使用して、アプリのすべての dyno の状態をターミナルに表示します。
$ heroku ps
=== web (Basic): bundle exec puma -C config/puma.rb (1)
web.1: up 2023/06/01 14:41:08 -0500 (~ 1s ago)
この例では、1 つの web
プロセスが実行されています。
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 open
を実行します。
$ heroku open
ブラウザに、「Hello World」というテキストが表示されます。表示されない場合、またはエラーが発生した場合は、ウェルカムページのコンテンツをレビューして確認してください。
Heroku では、開発中のすべてのアプリケーションにデフォルトの Web URL が提供されます。アプリケーションを本番環境用に準備できたら、カスタムドメインを追加します。
アプリケーションログの表示
アプリが正しく実行されないか、またはエラーを生成する場合、アプリログは貴重なツールです。
実行中のアプリに関する情報は、Heroku CLI のログコマンド heroku logs
を使用して表示します。出力例を次に示します。
$ heroku logs
2023-06-01T19:40:08.876301+00:00 app[api]: Initial release by user developer@example.com2023-06-01T19:40:08.876301+00:00 app[api]: Release v1 created by user developer@example.com2023-06-01T19:40:09.126625+00:00 app[api]: Enable Logplex by user developer@example.com2023-06-01T19:40:09.126625+00:00 app[api]: Release v2 created by user developer@example.com2023-06-01T19:40:11.192762+00:00 app[api]: Running release v3 commands by user developer@example.com2023-06-01T19:40:11.192762+00:00 app[api]: Attach DATABASE (@ref:postgresql-concave-07363) by user developer@example.com2023-06-01T19:40:11.207409+00:00 app[api]: @ref:postgresql-concave-07363 completed provisioning, setting DATABASE_URL. by user developer@example.com2023-06-01T19:40:11.207409+00:00 app[api]: Release v4 created by user developer@example.com2023-06-01T19:40:13.000000+00:00 app[api]: Build started by user developer@example.com2023-06-01T19:41:00.641279+00:00 app[api]: Release v5 created by user developer@example.com2023-06-01T19:41:00.641279+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.com2023-06-01T19:41:01.287890+00:00 app[api]: Release v6 created by user developer@example.com2023-06-01T19:41:01.287890+00:00 app[api]: Deploy b631eab3 by user developer@example.com2023-06-01T19:41:01.299857+00:00 app[api]: Scaled to console@0:Basic rake@0:Basic web@1:Basic by user developer@example.com2023-06-01T19:41:04.000000+00:00 app[api]: Build succeeded
2023-06-01T19:41:04.248804+00:00 heroku[web.1]: Starting process with command `bundle exec puma -C config/puma.rb`
2023-06-01T19:41:05.434114+00:00 app[web.1]: Puma starting in single mode...
2023-06-01T19:41:05.434151+00:00 app[web.1]: * Puma version: 5.6.5 (ruby 3.1.4-p223) ("Birdie's Version")
2023-06-01T19:41:05.434151+00:00 app[web.1]: * Min threads: 5
2023-06-01T19:41:05.434152+00:00 app[web.1]: * Max threads: 5
2023-06-01T19:41:05.434152+00:00 app[web.1]: * Environment: production
2023-06-01T19:41:05.434152+00:00 app[web.1]: * PID: 2
2023-06-01T19:41:08.458892+00:00 app[web.1]: * Listening on http://0.0.0.0:31801
2023-06-01T19:41:08.465086+00:00 app[web.1]: Use Ctrl-C to stop
2023-06-01T19:41:08.629355+00:00 heroku[web.1]: State changed from starting to up
2023-06-01T19:41:13.468462+00:00 app[web.1]: I, [2023-06-01T19:41:13.468332 #2] INFO -- : [540eb06e-dbd1-4387-b81f-44b46409f44e] Started GET "/" for 13.110.54.13 at 2023-06-01 19:41:13 +0000
2023-06-01T19:41:13.472148+00:00 app[web.1]: I, [2023-06-01T19:41:13.472085 #2] INFO -- : [540eb06e-dbd1-4387-b81f-44b46409f44e] Processing by WelcomeController#index as HTML
2023-06-01T19:41:13.475029+00:00 app[web.1]: I, [2023-06-01T19:41:13.474967 #2] INFO -- : [540eb06e-dbd1-4387-b81f-44b46409f44e] Rendered welcome/index.html.erb within layouts/application (Duration: 0.5ms | Allocations: 223)
2023-06-01T19:41:13.485214+00:00 app[web.1]: I, [2023-06-01T19:41:13.485154 #2] INFO -- : [540eb06e-dbd1-4387-b81f-44b46409f44e] Rendered layout layouts/application.html.erb (Duration: 10.8ms | Allocations: 2734)
2023-06-01T19:41:13.485616+00:00 app[web.1]: I, [2023-06-01T19:41:13.485568 #2] INFO -- : [540eb06e-dbd1-4387-b81f-44b46409f44e] Completed 200 OK in 13ms (Views: 12.4ms | Allocations: 3736)
2023-06-01T19:41:13.488454+00:00 heroku[router]: at=info method=GET path="/" host=shrouded-shore-72271.herokuapp.com request_id=540eb06e-dbd1-4387-b81f-44b46409f44e fwd="13.110.54.13" dyno=web.1 connect=0ms service=29ms status=200 bytes=3432 protocol=https
2023-06-01T19:41:13.690136+00:00 heroku[router]: at=info method=GET path="/assets/application-e0cf9d8fcb18bf7f909d8d91a5e78499f82ac29523d475bf3a9ab265d5e2b451.css" host=shrouded-shore-72271.herokuapp.com request_id=dab0cf28-60f8-4b47-93c2-f5b3fc85f5c7 fwd="13.110.54.13" dyno=web.1 connect=0ms service=1ms status=200 bytes=575 protocol=https
2023-06-01T19:41:13.810828+00:00 heroku[router]: at=info method=GET path="/assets/es-module-shims.min-4ca9b3dd5e434131e3bb4b0c1d7dff3bfd4035672a5086deec6f73979a49be73.js" host=shrouded-shore-72271.herokuapp.com request_id=7864b963-e8e8-423d-9164-2ca10f9c9209 fwd="13.110.54.13" dyno=web.1 connect=1ms service=1ms status=200 bytes=12472 protocol=https
2023-06-01T19:41:13.983849+00:00 heroku[router]: at=info method=GET path="/assets/turbo.min-f309baafa3ae5ad6ccee3e7362118b87678d792db8e8ab466c4fa284dd3a4700.js" host=shrouded-shore-72271.herokuapp.com request_id=0c0d3b53-7b69-49aa-9382-d3026d7cd6f6 fwd="13.110.54.13" dyno=web.1 connect=0ms service=2ms status=200 bytes=22749 protocol=https
2023-06-01T19:41:13.984491+00:00 heroku[router]: at=info method=GET path="/assets/application-37f365cbecf1fa2810a8303f4b6571676fa1f9c56c248528bc14ddb857531b95.js" host=shrouded-shore-72271.herokuapp.com request_id=82d57998-2665-4f4a-ae49-340a91dfea50 fwd="13.110.54.13" dyno=web.1 connect=0ms service=1ms status=200 bytes=323 protocol=https
2023-06-01T19:41:13.985410+00:00 heroku[router]: at=info method=GET path="/assets/stimulus-loading-1fc59770fb1654500044afd3f5f6d7d00800e5be36746d55b94a2963a7a228aa.js" host=shrouded-shore-72271.herokuapp.com request_id=631d6758-7218-49b6-baca-c6fa79dbdc0a fwd="13.110.54.13" dyno=web.1 connect=0ms service=1ms status=200 bytes=1202 protocol=https
2023-06-01T19:41:13.985498+00:00 heroku[router]: at=info method=GET path="/assets/stimulus.min-d03cf1dff41d6c5698ec2c5d6a501615a7a33754dbeef8d1edd31c928d17c652.js" host=shrouded-shore-72271.herokuapp.com request_id=a914c320-9484-4f15-8108-d125a852e366 fwd="13.110.54.13" dyno=web.1 connect=0ms service=1ms status=200 bytes=10664 protocol=https
2023-06-01T19:41:14.085172+00:00 heroku[router]: at=info method=GET path="/assets/controllers/index-2db729dddcc5b979110e98de4b6720f83f91a123172e87281d5a58410fc43806.js" host=shrouded-shore-72271.herokuapp.com request_id=5317039b-cbfd-453b-b90d-23615dcbbe86 fwd="13.110.54.13" dyno=web.1 connect=0ms service=1ms status=200 bytes=444 protocol=https
2023-06-01T19:41:14.187630+00:00 heroku[router]: at=info method=GET path="/assets/controllers/application-368d98631bccbf2349e0d4f8269afb3fe9625118341966de054759d96ea86c7e.js" host=shrouded-shore-72271.herokuapp.com request_id=32a0044d-fb13-444a-8e56-fc7682f7be17 fwd="13.110.54.13" dyno=web.1 connect=0ms service=1ms status=200 bytes=349 protocol=https
アプリのログの完全なライブストリームを表示するには、コマンドに -t
/--tail
を追加します。
$ heroku logs --tail
Heroku では、デフォルトで 1500 行のアプリケーションログが記録されますが、完全なログストリームはサービスとして提供されています。複数のアドオンプロバイダが、ログの永続化、検索、メールや SMS 通知などの機能を提供するログサービスを用意しています。
オプションのステップ
Rails コンソールの使用
One-off dyno をトリガーして、スクリプトやアプリケーションを必要な場合にのみ実行するには、Heroku CLI の run
コマンドを使用します。このコマンドを使用して、アプリの環境で試行するためにローカルターミナルにアタッチされた Rails コンソールプロセスを起動します。
$ heroku run rails console
irb(main):001:0> puts 1+1
2
また、run bash
Heroku CLI コマンドもデバッグに役立ちます。このコマンドは、対話型の bash セッションで新しい One-off dyno を起動します。
Rake コマンドの実行
Rails コンソールと同様に、run
コマンドを使用して、db:migrate
などの rake
コマンドを実行します。
$ heroku run rake db:migrate
Procfile をローカルで使用する
Procfile
をローカルで使用するには、heroku local
CLI コマンドを使用します。
Procfile
でのコマンドの実行に加えて、heroku local
コマンドでは、環境変数を .env
ファイル経由でローカルで管理することもできます。RACK_ENV
を、ローカル環境の場合は development
に、Puma の場合は PORT
に設定します。
$ echo "RACK_ENV=development" >>.env
$ echo "PORT=3000" >> .env
.env
ファイルを使用して環境変数をローカルで使用する代わりの方法として dotenv gem があります。
これらの変数はローカル環境の設定専用であるため、.env
を .gitignore
に追加します。
$ echo ".env" >> .gitignore
$ git add .gitignore
$ git commit -m "add .env to .gitignore"
Foreman を使用して、Procfile をローカルでテストします。local
を使用して Web サーバーを起動します。
$ heroku local
[OKAY] Loaded ENV .env File as KEY=VALUE Format
2:41:17 PM web.1 | Puma starting in single mode...
2:41:18 PM web.1 | * Puma version: 5.6.5 (ruby 3.1.4-p223) ("Birdie's Version")
2:41:18 PM web.1 | * Min threads: 5
2:41:18 PM web.1 | * Max threads: 5
2:41:18 PM web.1 | * Environment: development
2:41:18 PM web.1 | * PID: 98853
2:41:19 PM web.1 | * Listening on http://0.0.0.0:3000
2:41:19 PM web.1 | Use Ctrl-C to stop
Ctrl+C
または Cmd+C
を押して終了します。
Rails アセットパイプライン
Heroku にデプロイするときに、Rails アセットパイプラインを起動するためのオプションはいくつかあります。アセットパイプラインに関する一般的な情報については、「Heroku での Rails アセットパイプライン」の記事を参照してください。
Rails 7 では、必要がなくなった config.assets.initialize_on_precompile
オプションが削除されました。さらに、アセットコンパイルで何らかのエラーが発生するとプッシュが失敗するようになりました。Rails 7 アセットパイプラインのサポートについては、Ruby サポートのページを参照してください。
トラブルシューティング
たとえば heroku ps
に crashed
状態が表示されるなど、Heroku にデプロイされたアプリがクラッシュした場合は、アプリのログを確認します。次のセクションでは、アプリのクラッシュの一般的な原因について説明します。
開発またはテスト gem でのランタイムの依存関係
デプロイ中に gem が存在しない場合は、Bundler グループをチェックしてください。Heroku では、アプリが development
または test
グループなしでビルドされ、アプリの実行をこれらのいずれかのグループの gem に依存している場合は、それをグループから除外します。
一般的な例として、Rakefile
での RSpec タスクの使用があります。このエラーは多くの場合、次のようになります。
$ 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
まず、開発またはテスト gem グループなしで bundle install
を実行して、問題をローカルに複製します。
$ bundle install --without development:test
…
$ bundle exec rake -T
rake aborted!
no such file to load -- rspec/core/rake_task
bundler
の --without
オプションは永続的です。このオプションを削除するには、bundle config --delete without
を実行します。
これらの Rake タスクを gem のロード中に条件付きにすることによってエラーを解決します。次に例を示します。
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 にプッシュします。
次のステップ
Rails 7 アプリケーションをデプロイできました。調査を継続するには、次に、以下の記事を確認してください。
- 「Ruby サポートカテゴリ」では、Heroku での Ruby および Rails の使用に関する詳細を確認できます。
- 「デプロイカテゴリ」では、デプロイを効率的かつ簡単に行うことができるようにする、多くの強力な統合や機能を紹介しています。
コストを抑制するために、チュートリアルを完了したらすぐにサンプルアプリを削除し、データベースも削除してください。
アプリとアドオンを削除する
アカウントからアプリとデータベースを削除します。使用したリソースに対してのみ課金されます。
この操作により、アドオンとデータベースに保存されたすべてのデータが削除されます。
$ heroku addons:destroy heroku-postgresql
この操作により、アプリケーションが完全に削除されます。
$ heroku apps:destroy
以下のコマンドによって、アドオンとアプリが消去されたことを確認できます。
$ heroku addons --all
$ heroku apps --all
これで、アプリをデプロイする準備ができました。