Sinatra アプリを Heroku にデプロイする
2022/05/05
Sinatra アプリのデプロイ先を探していて、いつも Rails アプリのデプロイ先でお世話になっている Heroku が候補に上がったので簡単に肩慣らし
公式で用意されていた Rack ベースのアプリのデプロイ するためのドキュメントを参考にした
ラックアップファイルさえあれば、シンプルなアプリだったら何もコードの変更をせずにデプロイできるので便利
手順
Sinatra アプリの作成
「Hello, world!」と返すだけのシンプルなアプリ
Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
ruby "2.7.4"
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
gem "sinatra"
app.rb
# frozen_string_literal: true
require "sinatra/base"
class App < Sinatra::Application
get "/" do
"Hello world!\n"
end
end
config.ru
require './app'
run App
ローカルで起動
$ rackup
$ curl localhost:9292
Hello world!
Heroku へデプロイ
$ heroku login
$ heroku create app-name
$ git push heroku main
$ curl https://app-name.herokuapp.com/
Hello world!
ハマったところ
Mac の環境の場合、おそらく以下のエラーが出る
$ git push heroku main -f
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 12 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 855 bytes | 855.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
remote: -----> Ruby app detected
remote: -----> Installing bundler 2.3.10
remote: -----> Removing BUNDLED WITH version in the Gemfile.lock
remote: -----> Compiling Ruby/Rack
remote: -----> Using Ruby version: ruby-2.7.4
remote: -----> Installing dependencies using bundler 2.3.10
remote: Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
remote: Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote: is x86_64-linux. Add the current platform to the lockfile with
remote: `bundle lock --add-platform x86_64-linux` and try again.
remote: Bundler Output: Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
remote: is x86_64-linux. Add the current platform to the lockfile with
remote: `bundle lock --add-platform x86_64-linux` and try again.
remote:
remote: !
remote: ! Failed to install gems via Bundler.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
Heroku で動かすためには以下のコマンドを実行し、差分の Gemfile.lock もコミットする必要がある
詳細は参考の記事を参照されたい
$ bundle lock --add-platform x86_64-linux
$ git diff Gemfile.lock
diff --git a/Gemfile.lock b/Gemfile.lock
index c0c917f..cde5eb9 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -16,6 +16,7 @@ GEM
PLATFORMS
x86_64-darwin-20
+ x86_64-linux
DEPENDENCIES
sinatra
リポジトリ
今回作ったものは、GitHub にあげた
https://github.com/ytkg/heroku-sinatra