実現したいこと
- dockerでcarrywaveとminimagickを使用して画像をアップロードしたいです。
前提
- 今までは問題なく実装できており、アップロードが出来ていました。
rails5.2系→6.1にアップグレードしたところ、アップロードがされなくなりました。
尚、全く同じ条件(githubを使用し、gemfilelockで共有が出来ている状態)で、
ローカルマシンでサーバーを立ち上げたテスト(localhost:3000)で試したところ、問題なくアップロードできるため、
dockerの条件に問題があるのではと考えております。
発生している問題・エラーメッセージ
rb
1ActiveRecord::RecordInvalid in EventsController#update 2バリデーションに失敗しました: Image画像変換に失敗しました。別のファイルを使用してください。 3※ja.ymlを使用しない場合 4ActiveRecord::RecordInvalid in EventsController#update 5バリデーションに失敗しました: 6Imagetranslation missing: ja.errors.messages.mini_magick_processing_error:
通常、画像のupdateを行うとエラーが発生せず、update!と、意図的にエラーを起こすと上記が表示されます。
それ以外は、エラーがlogに出ず、rollbackされております。
該当のソースコード
view
rb
1<%= image_tag "/assets/default.png", class: "img-fluid top-img-mobile" %> 2<div class="field"> 3 <br> 4 <div style="height: 29px;"> 5 <%= f.label " +新規追加", for: "event_image",class: "fas fa-camera label-1" %> 6 <%= f.file_field :image, id: "event_image", class: "img-field-change" %> 7 <%= f.hidden_field :image_cache %> 8 <br> 9 </div> 10 <div class="small" style="text-align: right"> 11 ※jpeg・jpg・pngのみ。推奨サイズ500x750 12 </div> 13 <div class="small" style="text-align: right"> 14 ※画像ファイルの選択後、最下部の「編集完了」をクリック後に反映 15 </div> 16</div>
contoroller
rb
1@event.update( 2 image: params[:event][:image] 3 ) 4 redirect_to event_path(@event) 5 flash[:success] = "編集を保存しました。"
image uploader
rb
1class ImageUploader < CarrierWave::Uploader::Base 2 3 include CarrierWave::MiniMagick 4 5 # Choose what kind of storage to use for this uploader: 6 if Rails.env.production? 7 storage :fog 8 elsif Rails.env.staging? 9 storage :fog 10 else 11 storage :file 12 end 13 14 #storage :fog 15 16 # This is a sensible default for uploaders that are meant to be mounted: 17 def store_dir 18 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 19 end 20 21 # Process files as they are uploaded: 22 process resize_to_fit: [700, nil] 23 24 #イベント画像 25 version :thumb do 26 process resize_to_limit: [700, 450] 27 end 28 29 #ユーザープロフィール写真 30 31 def extension_allowlist 32 %w(jpg jpeg png) 33 end 34 35end 36
model
rb
1class UploadedImage < ApplicationRecord 2 mount_uploader :image, ImageUploader 3end
該当のソースコードgem
gemfile
rb
1source 'https://rubygems.org' 2git_source(:github) { |repo| "https://github.com/#{repo}.git" } 3 4ruby '2.7.7' 5 6# Rails 7gem 'rails', '~> 6.0' 8gem 'rails-i18n' 9gem 'listen' 10 11#serch method用(eventsの検索) 12gem 'ransack' 13 14#sidekiq 非同期処理 15gem 'sidekiq','~> 5.2.8' 16gem 'sinatra', require: false # ダッシュボードのため 17gem 'sidekiq-history' 18 19#並列処理 20gem 'parallel' 21 22#gem 'redis-actionpack' 23gem 'redis-namespace' 24#gem 'redis-rails' #windows Rails_junbiインストール済み 25 26#docker-compose up で必要 27gem 'autoprefixer-rails' 28 29#ページネーション 30gem 'kaminari' 31 32#IPアドレス制限、Dos攻撃 33gem 'rack-attack' 34 35#PDF作成 36gem 'prawn' 37gem 'prawn-table' 38 39 40# データが見やすいようにする 41gem 'hirb' 42gem 'hirb-unicode' 43 44 45# devise 46gem 'devise' 47gem 'devise-i18n' 48gem 'devise-i18n-views' 49 50#画像アップロード 51gem 'carrierwave', '~>2.0' 52gem 'mini_magick' 53gem 'mimemagic', '~> 0.3.6' 54gem 'image_processing', '~> 1.2' 55 56# Bootstrap 57#gem 'bootstrap-sass' 58gem 'bootstrap', '~> 4.6.0' 59gem 'jquery-rails' 60gem 'devise-bootstrap-views' 61 62# リッチテキストフォーム 63gem 'summernote-rails', '~> 0.8.12.0' 64gem 'simple_form' 65 66#stripe 67gem 'stripe' 68 69#javascriptのデータ受け渡しgem 70gem 'gon' 71 72#gem 'jquery-turbolinks', '~> 2.1' 73gem 'jquery-turbolinks', '~> 2.1' 74 75#nokogiri エラー回避にダウンロード 76gem 'nokogiri', '~> 1.11.0.rc1' 77 78# Use Puma as the app server 79gem 'puma' 80 81# Puma memory kill 82gem 'puma_worker_killer' 83 84# Use SCSS for stylesheets 85gem 'sass-rails' 86# Use Uglifier as compressor for JavaScript assets 87gem 'uglifier', '>= 1.3.0' 88 89# Use CoffeeScript for .coffee assets and views 90gem 'coffee-rails' 91# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks 92gem 'turbolinks', '~> 5' 93# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 94gem 'jbuilder' 95# Use Redis adapter to run Action Cable in production 96# gem 'redis', '~> 4.0' 97# Use ActiveModel has_secure_password 98gem 'bcrypt', '~> 3.1.7' 99# Use ActiveStorage variant 100# gem 'mini_magick', '~> 4.8' 101 102# Use Capistrano for deployment 103# gem 'capistrano-rails', group: :development 104 105# Reduces boot times through caching; required in config/boot.rb 106gem 'bootsnap', '>= 1.1.0', require: false 107 108group :development, :test do 109 # Call 'byebug' anywhere in the code to stop execution and get a debugger console 110 gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] 111end 112 113group :development do 114 # Access an interactive console on exception pages or by calling 'console' anywhere in the code. 115 gem 'web-console', '>= 3.3.0' 116 117 # Use sqlite3 as the database for Active Record 118 gem 'sqlite3' 119 120 #csv import 121 gem 'activerecord-import' 122 123 #N+1 test 124 gem 'bullet' 125 126 gem 'letter_opener_web' 127 gem 'sys-proctable' 128 gem 'rspec-rails' 129 gem "ffi" 130 131end 132 133group :test do 134 # Adds support for Capybara system testing and selenium driver 135 gem 'capybara', '>= 2.15' 136 gem 'selenium-webdriver' 137 #chromedriver-helperの代わり 138 gem 'webdrivers' 139 gem 'rspec-rails' 140 gem "ffi" 141 142end 143 144group :staging do 145 gem 'pg' 146 gem 'fog-aws' 147 gem 'rails_12factor' 148 gem 'rspec-rails' 149end 150 151group :production do 152 gem 'pg' 153 gem 'fog-aws' 154 gem 'rails_12factor' 155end 156 157# Windows does not include zoneinfo files, so bundle the tzinfo-data gem 158gem 'tzinfo-data' 159 160gem 'exception_notification' 161gem 'exception_notification-rake' 162gem 'slack-notifier' 163gem 'dotenv-rails'
該当のソースコードdocker関連
Dockerfile
rb
1FROM alpine:3.13 2FROM node:18-alpine as node 3FROM ruby:2.7.7-alpine 4COPY --from=node /usr/local/bin/node /usr/local/bin/node 5RUN apk update \ 6 && apk add --no-cache build-base make g++ sqlite-dev postgresql postgresql-dev imagemagick6 imagemagick6-dev imagemagick6-c++ \ 7 && gem install nokogiri \ 8 && mkdir /app 9WORKDIR /app 10COPY ./Gemfile /app/Gemfile 11COPY ./Gemfile.lock /app/Gemfile.lock 12RUN bundle install 13COPY ./ /app 14 15COPY ./docker/web/entrypoint.sh /usr/bin/ 16RUN chmod +x /usr/bin/entrypoint.sh 17ENTRYPOINT ["entrypoint.sh"] 18EXPOSE 8000 19 20CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
rb
1version: "3" 2services: 3 # -------------------------------------------------------------------------------- 4 # Web Server 5 # -------------------------------------------------------------------------------- 6 web: &web 7 build: 8 context: . 9 dockerfile: docker/web/Dockerfile 10 command: sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 80 -b '0.0.0.0' -e development" 11 ports: 12 - 80:80 13 volumes: 14 - bundle_install:/usr/local/bundle 15 - "./:/app" 16 # 1. exclude volumes 17 - /app/.git 18 - /app/.github 19 - /app/.idea 20 - /app/log 21 - /app/tmp 22 - /app/vendor 23 stdin_open: true 24 tty: true 25 environment: 26 TZ: Asia/Tokyo 27 # -------------------------------------------------------------------------------- 28 # Web Server 29 # -------------------------------------------------------------------------------- 30 redis: 31 image: "redis:latest" 32 ports: 33 - "6379:6379" 34 volumes: 35 - "./data/redis:/data" 36volumes: 37 mysql-data: 38 driver: local 39 bundle_install: 40
試したこと
Active strageの導入
https://qiita.com/asami___t/items/1aa2022ed9c511d4232c
https://qiita.com/asami___t/items/1aa2022ed9c511d4232c
補足情報(FW/ツールのバージョンなど)
ruby 2.7.1
打つ手がなく・・・大変お忙しい中恐縮ですが、教えて頂けると本当にうれしいです。
どうぞよろしくお願い申し上げます。

あなたの回答
tips
プレビュー