今回、Herokuが無料で利用できなくなる!?といった話を聞いたので、
新たにFly.ioでデプロイできるか試した記事になります。
手順
今回は、この流れで進みます!
1. Fly.ioの準備
- FlyのCLI(コマンドを使えるようにするもの)をインストール
- アカウント作成
まず、Fly.ioを見てみましょう👀
最初の方にこんなことが書いてありますね。
訳すと、(DeepL先生ありがとう💕)
Fly を使い始めるには、Fly 上のアプリを管理するための CLI アプリ、flyctl が必要です。すでにインストールされている方は、このままお進みください。インストールされていない場合は、インストールガイドに進んでください。インストールが完了したら、Flyにログインしてください。
とのことなので、まずはflyを扱うためのCLIをインストールしましょう!
1. FlyのCLI(コマンドを使えるようにするもの)をインストール
↑こちらの内容に、インストール方法がありますが
一応、手順を以下に載せておきますね!
1.homebrew
brew install flyctl
2.carlコマンドでゴリ押しでインストール
Homebrewを使ってない方はこちらですね!
curl -L https://fly.io/install.sh | sh
これで、CLIをインストールできました!
2. アカウント作成
ここからは、flyを使うためにアカウントを登録します。
↑こちらの内容になります!
flyのアカウントがある方は、以下のコマンドを入力しましょう!
flyctl auth login
アカウントがない方はこちらです!
flyctl auth signup
このコマンド実行後、EmailかGithubでアカウント登録しないといけないです。
個人的にはGithub連携が楽ちんなので、そちらで行いました!
fly auth login
コマンド実行後
continue as [あなたのメールアドレス] をクリックしましょう。
次に、右側のクレカの下にあるTry Fly.io for freeをクリックしましょう。
これでログイン完了です!
2. ビルド&デプロイ
ここからは、一応何らかの形でRailsのアプリケーションがある前提で進みます。
(もしアプリないよ!という人は、rails new test_app
などで作成すると良いでしょう!)
- ビルド
- デプロイ
- エラー
- 2回目以降のデプロイ方法
Windowsの方はコマンドでfly
とあるところを
flyctl
と解釈していただければ良いはずです!
1. ビルド
ビルドを行うために、以下のコマンドを入れます。
fly launch
すると、以下のようにFlyの設定が出てきます。
Creating app in /Users/ユーザ名/Desktop/アプリ名
Scanning source code
Detected a Rails app
? App Name (leave blank to use an auto-generated name):
アプリ名を入れてあげましょう!
英語の小文字(記号なし)で設定しましょう!
次に、以下の表示が出てきます。
Automatically selected personal organization: xxxxx@gmail.com
? Select region: [Use arrows to move, type to filter]
cdg (Paris, France)
dfw (Dallas, Texas (US))
ewr (Secaucus, NJ (US))
fra (Frankfurt, Germany)
gru (São Paulo)
hkg (Hong Kong, Hong Kong)
iad (Ashburn, Virginia (US))
> lax (Los Angeles, California (US))
lhr (London, United Kingdom)
maa (Chennai (Madras), India)
mad (Madrid, Spain)
mia (Miami, Florida (US))
nrt (Tokyo, Japan)
ord (Chicago, Illinois (US))
phx (Phoenix, Arizona (US))
ここでは、住んでいる地域を選びましょう!
私は日本在住なので、nrt (Tokyo, Japan)
を選びました!
(ご在住の地域から遠いところを選ぶと、その地域のサーバになってしまい
通信速度が落ちるので、ご注意ください)
次に、Postgresqlを使うか聞かれるので、y
と入力しましょう!
? Would you like to set up a Postgresql database now? [yN]
また、アプリの設定に関しても聞かれますが、無料アカウントでは
Single node, 1x shared CPU, 256MB RAM, 1GB disk
が限界なので
こちらを選んでください!
? Select configuration: [Use arrows to move, type to filter]
> Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk
Production - Highly available, 1x shared CPU, 256MB RAM, 10GB disk
Production - Highly available, 1x Dedicated CPU, 2GB RAM, 50GB disk
Production - Highly available, 2x Dedicated CPU's, 4GB RAM, 100GB disk
Specify custom configuration
うまくいけば、最新のログで、以下のような表示が出てきます!
Monitoring Deployment
1 desired, 1 placed, 1 healthy, 0 unhealthy [health checks: 1 total, 1 passing]
--> v0 deployed successfully
flyctl launch
実行時のエラー
以下のようなエラーが出るかもしれません。
Error name argument or flag must be specified when not running interactively
そんな時は、以下のコマンドで一発です!
flyctl launch --name アプリ名 --region nrt
--region
の後は、お住まいの地域で変わってきますが、
日本にご在住の方はnrt
(東京)で問題ありません🙌
2. デプロイ
次に、デプロイを行います。
fly deploy
ただ、このコマンドの時、私はエラーが出ました😅
そのエラーの対処法を以下に残しておきますね!
3. エラー:MacのRubyバージョンとアプリのRubyバージョンが合わない
=> ERROR [gems 3/3] RUN bundle install && rm -rf vendor/bundle/ruby/*/c 0.6s
------
> [gems 3/3] RUN bundle install && rm -rf vendor/bundle/ruby/*/cache:
#16 0.487 Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
#16 0.636 Your Ruby version is 3.1.1, but your Gemfile specified 3.0.3
------
Error error building: executor failed running [/bin/bash -c bundle install && rm -rf vendor/bundle/ruby/*/cache]: exit code: 18
対処法
Railsのアプリケーションディレクトリ直下にある、fly.toml
を開きましょう。
開くと、以下のような状態になっていました。
Flyのビルドで使うバージョンがrbenvのバージョンと異なっていたのです。
私は、rbenv
をいうRubyのバージョン管理ツールで
このアプリのRubyバージョンを3.0.3にしていたのですが、
flyが勝手にMacの最新のRubyバージョン(3.1.1)にしてしまっていたようです。
なので、以下のように変更しました。
# fly.toml file generated for geekinstagram on 2022-08-26T10:51:31+09:00
app = "geekinstagram"
kill_signal = "SIGINT"
kill_timeout = 5
processes = []
[build]
[build.args]
BUNDLER_VERSION = "2.2.32"
NODE_VERSION = "14"
# RUBY_VERSION = "3.1.1"
RUBY_VERSION = "3.0.3"
すると、デプロイが最後までうまくいきました🎉🎉🎉
4. 2回目以降のデプロイ
2回目以降のデプロイは、以下のコマンドのみでOKです!
fly deploy
3. サイトを見てみる
それでは、以下のコマンドで見てみましょう!
fly open
おお〜!
トプ画代わりに設定していた乙骨くんが出てきました!笑
これで終了です!
お疲れ様でした✊
ちょっとしたエラー:背景画像が表示されない
先ほど、私のサイトで乙骨くんの画像が表示されていたと思うのですが
実は、1回目時点のデプロイで、画像は表示できていませんでした😅
この解決策も載せておきます!
↑の投稿にあるように、css
の拡張子を.css.erb
の形式にして
該当のセレクタにRailsのasset_path
を適用すればOKです!!
.top-image {
background-image: url("<%= asset_path('top.png') %>");
background-position: center;
background-size: cover;
height: 120vh;
}
sqlite3に関するエラー
=> ERROR [stage-4 8/8] RUN bin/rails fly:build 3.3s
------
> [stage-4 8/8] RUN bin/rails fly:build:
#26 3.230 rails aborted!
#26 3.230 LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? sqlite3 is not part of the bundle. Add it to your Gemfile.
このようなエラーが出ていますが、sqlite3
がGemfileにないと言われているので
Gemfileに追加しましょう。
(このエラーはプロダクション環境などで
sqlite3を賢く分けている方のみ出現するエラーです。)
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '3.0.3'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 6.1.4', '>= 6.1.4.1'
# Use sqlite3 as the database for Active Record
+ gem 'sqlite3', '~> 1.4'
# Use Puma as the app server
gem 'puma', '~> 5.0'
# Use SCSS for stylesheets
gem 'sass-rails', '>= 6'
次に、ターミナルでbundle install
を実行し、
再度fly deploy
を実行しましょう。
これで問題なく動くはずです!
参考文献