「現場で使えるRuby on Rails 5 速習実践ガイド」で躓いたこと

# はじめに
今回「現場で使えるrails5実戦ガイド」を読んだのですが、本書が2018年のもので色々とバージョンが古く、序盤の環境構築で苦戦したので参考になったものを残していきたいと思います。(現在2024年)

# 躓いた部分
① apt-get update
本書のrubyバージョンが2.5.1のため、同バージョンのdocker imageを仕様したもののOSのバージョンが古く、デッドリンクを参照しているためエラーに。
参照先のリンクを修正することで解消。
[参考](https://qiita.com/teriyakisan/items/e5cf7d5228dc02500562)
``` shell:コマンド
echo "deb http://archive.debian.org/debian/ stretch main" > /etc/apt/sources.list \
    && echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list \
    && apt-get update
```

② apt-get install
installするのは以下
```shell:コマンド
apt-get  install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
```
zlib1g-devの`1`を`l`と見間違え、タイポしたためエラー。
本の印字だと意外と気づかない🥲。
[参考](https://www.linuxquestions.org/questions/linux-software-2/couldn%27t-find-package-zliblg-dev-724477/)

③ gem update --system
最新版のRubyGemsは古いrubyのバージョンをサポートしておらずエラーに。
[2系の最新版](https://rubygems.org/gems/rubygems-update/versions)を入れることで解消。
```shell:コマンド
gem update --system 2.7.11
```
[参考](https://qiita.com/wktk/items/70db4a16edbfa6790d90)

④ gem install bundler
3と同様のサポート切れ。
今回はエラーで対象の最終バージョンを教えてくれたので、そちらで対応。
```shell:エラー
ERROR:  Error installing bundler:
	The last version of bundler (>= 0) to support your Ruby & RubyGems was 2.3.27. Try installing it with `gem install bundler -v 2.3.27`
	bundler requires Ruby version >= 3.0.0. The current ruby version is 2.5.0.
```
```shell:コマンド
gem install bundler -v 2.3.27
```

⑤ gem install rails -v 5.2.1
railsをインストールしようとしてエラー。エラーに従ってnokogiriをインストール。
```shell:コマンド
gem install nokogiri -v 1.12.5
```
しかしまた別のエラー。調べてみると、以下コマンドを流すといけるらしい。[参考](https://qiita.com/murata0705/items/dfa2fed6c773f925a975)
```shell:コマンド
gem install rails-html-sanitizer -v 1.5.0
```
その後もrailsインストール時にエラーは出るものの、エラーの通りにインストール
```shell:コマンド
gem install thor -v 1.2.2
```
```shell:コマンド
gem install timeout -v 0.4.0
```
```shell:コマンド
gem install net-protocol -v 0.1.2
```
```shell:コマンド
gem install net-imap -v 0.2.2
```
```shell:コマンド
gem install net-smtp -v 0.3.0
```
```shell:コマンド
gem install mini_mime -v 1.1.2
```
ここまでインストールすると、railsがインストールできるようになる。
```shell:コマンド
gem install rails -v 5.2.1
```

# Dockerfile
ここまで書いたものをDockerfileに
``` Dockerfile:Dockerfile
FROM ruby:2.5.1

RUN echo "deb http://archive.debian.org/debian/ stretch main" > /etc/apt/sources.list \
    && echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list \
    && apt-get update \
    && apt-get  install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev zlib1g-dev \
    && gem update --system 2.7.11 \
    && gem install bundler -v 2.3.27 \
    && gem install nokogiri -v 1.12.5 \
    && gem install rails-html-sanitizer -v 1.5.0 \
    && gem install thor -v 1.2.2 \
    && gem install timeout -v 0.4.0 \
    && gem install net-protocol -v 0.1.2 \
    && gem install net-imap -v 0.2.2 \
    && gem install net-smtp -v 0.3.0 \
    && gem install mini_mime -v 1.1.2 \
    && gem install rails -v 5.2.1 \
    && curl -sL https://deb.nodesource.com/setup_10.x |bash - \
    && apt-get install npm
```