LoginSignup
33
19

More than 1 year has passed since last update.

Fly.ioでRailsアプリをデプロイしてみた for Mac

Last updated at Posted at 2022-08-26

今回、Herokuが無料で利用できなくなる!?といった話を聞いたので、
新たにFly.ioでデプロイできるか試した記事になります。

手順

今回は、この流れで進みます!

  1. Fly.ioの準備
  2. ビルド&デプロイ
  3. サイトを見てみる

1. Fly.ioの準備

  1. FlyのCLI(コマンドを使えるようにするもの)をインストール
  2. アカウント作成

まず、Fly.ioを見てみましょう👀

image.png
最初の方にこんなことが書いてありますね。
訳すと、(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コマンド実行後

image.png

continue as [あなたのメールアドレス] をクリックしましょう。

image.png
次に、右側のクレカの下にあるTry Fly.io for freeをクリックしましょう。

すると、以下の画像のようなドキュメントの画面に移ります。
image.png

これでログイン完了です!

2. ビルド&デプロイ

ここからは、一応何らかの形でRailsのアプリケーションがある前提で進みます。
(もしアプリないよ!という人は、rails new test_appなどで作成すると良いでしょう!)

  1. ビルド
  2. デプロイ
  3. エラー
  4. 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を開きましょう。
image.png

開くと、以下のような状態になっていました。
Flyのビルドで使うバージョンがrbenvのバージョンと異なっていたのです。
私は、rbenvをいうRubyのバージョン管理ツールで
このアプリのRubyバージョンを3.0.3にしていたのですが、
flyが勝手にMacの最新のRubyバージョン(3.1.1)にしてしまっていたようです。
image.png

なので、以下のように変更しました。

fly.toml
# 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

image.png

おお〜!
トプ画代わりに設定していた乙骨くんが出てきました!笑
これで終了です!
お疲れ様でした✊

ちょっとしたエラー:背景画像が表示されない

先ほど、私のサイトで乙骨くんの画像が表示されていたと思うのですが
実は、1回目時点のデプロイで、画像は表示できていませんでした😅
この解決策も載せておきます!

↑の投稿にあるように、cssの拡張子を.css.erbの形式にして
該当のセレクタにRailsのasset_pathを適用すればOKです!!

top.scss.erb
.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を賢く分けている方のみ出現するエラーです。)

Gemfile
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を実行しましょう。

これで問題なく動くはずです!

参考文献

33
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
19