今回EC2上にデプロイする時にDockerfileのせいで詰まってしまいました。
なのでその解決方法を書いて生きたおと思います。
まず、Dockerfileの記述に足りないところがありました。
それは、yarnとNode.jsをインストールする記述が足りませんでした。
Rails6では、上の2つがないと行けないのですが、それを入れなくてもローカルでは動いていました。
なぜかというと、Dockerに乗せていないRails6のアプリケーションを作った時にローカル上にすでに入っていたからです。
しかし、EC2内のOSではローカルとは環境が違うのでそれらは入っていません。
なので、そのアプリケーションを入れる必要があります。
#問題のコード
Before
これは本番環境で詰まってしまった時に書いていたコードです。
YarnやNode.jsを入れる記述がないのでエラーになってしまいました。
FROM ruby:2.5.3
# railsコンソール中で日本語入力するための設定 <- NEW
ENV LANG C.UTF-8
# RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# /var/lib/apt/lists配下のキャッシュを削除し容量を小さくする <- NEW
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs \
&& rm -rf /var/lib/apt/lists/*
# 作業ディレクトリの設定
RUN mkdir /app_name
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
# gemfileを追加する
ADD ./src/Gemfile $APP_ROOT/Gemfile
ADD ./src/Gemfile.lock $APP_ROOT/Gemfile.lock
# gemfileのinstall
RUN bundle install
ADD ./src/ $APP_ROOT
この記述だと、Yarnなどが入っていないのがわかると思います。
なのでそれをこういった記述に変えた所エラーが出なくなりました。
FROM ruby:2.6.5
# 必要なパッケージのインストール(基本的に必要になってくるものだと思うので削らないこと)
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev
# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn
# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
# 作業ディレクトリの作成、設定
RUN mkdir /app_name
##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照
ENV APP_ROOT /app_name
WORKDIR $APP_ROOT
# ホスト側(ローカル)のGemfileを追加する(ローカルのGemfileは【3】で作成)
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
# Gemfileのbundle install
RUN bundle install
ADD . $APP_ROOT
#まとめ
基本的にDockerに乗せている状態で動いているのなら、本番環境でも動きます。
しかし、ローカル環境と本場環境後外から出てきてしまうエラーというのもあるので、それらに気をつけて開発していくことを心がけていきたいと思います。
ありがとうございました。