Production環境にてRailsアセットパイプラインエラー Sprockets::Rails::Helper::AssetNotFound
RailsアプリをECS(FARGATE)にデプロイしようと試みています。Railsの環境はproductionです。
登録したドメインにアクセスすると以下のエラー
Sprockets::Rails::Helper::AssetNotFound
The asset "application.css" is not present in the asset pipeline.
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
エラー通りに解釈するとSprocketsがcssのアセットファイルを読み込めないらしいです。
■試したこと
・1. rails_app/config/initializers/assets.rbに以下を記載
Rails.application.config.assets.paths << "/rails_app/public/assets"
・2. dockerコンテナ内(ローカル上)のrails console -e productionにて
irb(main):003:0> helper.stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' => "<link rel=\"stylesheet\" media=\"all\" href=\"/assets/application-xxxxx.css\" data-turbolinks-track=\"reload\" />"
となったのでpublic/assetsのシンボリックリンクを生成、public/assets/*をassets/に移動
などを行いましたが結局だめでした。暫定対策は
# production.rb config.assets.compile = false
ですが、正直望ましくありません。
以下がDockerfile, dockerignoreとなります。
ARG NODE_VERSION=14.16.0-alpine3.13 ARG RUBY_VERSION=3.0.0-alpine FROM node:${NODE_VERSION} as node FROM ruby:${RUBY_VERSION} # Node.js, Yarnのインストール ARG YARN_VERSION=v1.22.5 COPY --from=node /opt/yarn-${YARN_VERSION} /opt/yarn COPY --from=node /usr/local/bin/node /usr/local/bin/ COPY --from=node /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ RUN ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm ENV PATH $PATH:\ /usr/local/bin/yarn:\ /usr/local/bin/node # 依存パッケージのインストール RUN apk add --no-cache -t .build-dependencies \ build-base \ libxml2-dev\ libxslt-dev \ && apk add --no-cache \ bash \ file \ imagemagick \ libpq \ libxml2 \ libxslt \ mysql-client \ mysql-dev \ tini \ tzdata # 環境変数の設定 ENV RAILS_ENV="production" ENV NODE_ENV="production" ENV LANG="C.UTF-8" ENV TZ="Asia/Tokyo" ENV RAILS_SERVE_STATIC_FILES="true" # gemのインストールと依存パッケージの削除 WORKDIR /rails_app COPY Gemfile \ Gemfile.lock \ /rails_app/ RUN gem install bundler \ && bundle install -j$(getconf _NPROCESSORS_ONLN) --without development \ && apk del --purge .build-dependencies # アプリケーションコードのコピー COPY . /rails_app/ # アセットのプリコンパイル ARG SECRET_KEY_BASE RUN bundle exec rails assets:precompile SECRET_KEY_BASE=${SECRET_KEY_BASE} RAILS_ENV=${RAILS_ENV}\ && yarn cache clean \ && rm -rf node_modules tmp/cache CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
# Ignore bundler. .bundle vendor/bundle # Ignore all logfiles and tempfiles, but keep the sockets directory. log/* tmp/* !log/.keep !tmp/sockets/ !tmp/.keep # Ignore pidfiles, but keep the directory. tmp/pids/* !tmp/pids/ !tmp/pids/.keep # Ignore uploaded files in development. storage/* !storage/.keep public/assets/* .byebug_history # Ignore keys for decrypting credentials and more. config/master.key config/credentials/production.key public/packs public/packs-test node_modules yarn-error.log yarn-debug.log* .yarn-integrity # Ignore environment files. .env* # Ignore ignore files .dockerignore .gitignore
問題点はRUN bundle exec rails assets:precompile(以下略)だとみていますが解決できません。SECRET_KEY_BASEも問題なく、ローカルdocker-composeでは問題なく動作します。
リバースプロキシにnginx、public/, tmp/sockets/をボリュームで共有しています。
解決策をご教示していただけると大変ありがたいです。何卒宜しくお願いします。
■参考
https://railsguides.jp/asset_pipeline.html
https://qiita.com/metheglin/items/c5c756246b7afbd34ae2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。