Ruby on Rails でアセットのコンパイルを実行すると、Node.js がインストールされていないために Docker が失敗する
概要
docker-compose up を実行しようとしていますが、次の行でエントリポイントを実行しているときに実行されます。
バンドル実行 RAKE アセット:プリコンパイル RAILS_ENV=production
エラー: Node.js がインストールされていません。 Node.js https://nodejs.org/en/download/ をダウンロードしてインストールしてください。
私のDockerfileはノードをインストールするので、何が問題なのかわかりません。
さまざまな Docker ファイル設定を試しましたが、同じエラーが発生し続けます。誰かがそれを修正する方法を見てもらえますか?前もって感謝します。
Docker ファイル:
# syntax=docker/dockerfile:1
FROM ruby:3.0.4
ENV NODE_OPTIONS="--openssl-legacy-provider"
RUN apt-get update -qq && \
apt-get install -y nodejs postgresql-client python curl apt-transport-https && \
curl -fsSL https://deb.nodesource.com/setup_14.x | bash - && \
apt-get install -y nodejs && \
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
WORKDIR /eclipse
COPY Gemfile /eclipse/Gemfile
COPY Gemfile.lock /eclipse/Gemfile.lock
RUN bundle install
RUN echo "Install webpacker ----"
RUN bundle exec rails webpacker:install \
rails webpacker:compile
# Entrypoint.sh will be run every time the container starts.
COPY /bin/entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Configure the main process to run when running the image
CMD ["rails", "server", "-b", "0.0.0.0"]
エントリーポイント.sh
#!/bin/bash
set -e
echo "Compile assets ----"
bundle exec rake assets:precompile RAILS_ENV=production
echo "Create database ----"
bundle exec rake db:create
echo "Rake database ----"
bundle exec rake db:migrate
# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
解決策
このようなことに直面したとき、私は通常、失敗した行から順にすべてをコメントします。次に、Docker コンテナを起動し、最初にコメントアウトしたものを実行してみます。それは通常、道を示します。
予期していなかったものの古いバージョンをインストールしていることが判明することがよくあります。もちろん、ノード 14 を取り付けることになりますが、この時点では歯内でかなり長いものになります。
特定のケースで、これが新しいアプリである場合は、webpacker を廃止することをお勧めします。既存のアプリの場合は、https://github.com/shakacode/shakapacker に移行することをお勧めします。これは少なくともある程度は保守および更新されています。