【Rails6+Docker】の開発環境下で画像投稿機能を実装する際、とても苦労したため備忘録に残しておきます。
前提
・各種モデル、コントローラー、ビューは作成済み
・画像だけが表示されない状態
失敗例 carrierwave、minimagickの利用
はじめのうちは、carrierwave、minimagickを使って画像投稿機能の実装を試みました。
Carrierwaveの導入には「ImageMagick」がインストールされている必要があるみたいでしたので
下記のとおり、DockerfileにImageMagickをインストールする記述を追記
# Dockerfile
FROM ruby:3.0.0
RUN apt-get update -qq && \
apt-get install -y build-essential libpq-dev nodejs vim imagemagick #←追記
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
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
&& apt-get install -y nodejs
RUN mkdir -p /var/www/remote-work-space
WORKDIR /var/www/remote-work-space
ADD Gemfile /var/www/remote-work-space/Gemfile
ADD Gemfile.lock /var/www/remote-work-space/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD . /var/www/remote-work-space
RUN mkdir -p tmp/sockets
RUN mkdir -p tmp/pids
追記をして保存したら、$ docker-compose build --no-cacheを実行。
すると・・・
executor failed running [/bin/sh -c apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn vim imagemagik]: exit code: 100
ERROR: Service 'app' failed to build : Build failed
とエラーが返ってきて上手く行きませんでした。
そこで違う方法として、Active Storageを用いた実装を試してみたところ、上手くいきました。
成功例 Active Storageの利用
▼参考記事▼
重要コマンド (Active Storageのインストール)
$ docker-compose exec app bundle exec rails active_storage:install
docker-compose exec app bundle exec rails db:migrate
Gemfile
# Use Active Storage variant
# gem 'image_processing', '~> 1.2'
↓ コメントアウトを外します
# Use Active Storage variant
gem 'image_processing', '~> 1.2'
これによりImageProcessing経由で画像処理されます。
$ docker-compose buildでインストール完了後、「app/views/posts/index.html.erb」を確認してみると・・
今度こそ画像が表示されました!!!