Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ArgumentError in UsersController#updateが出てS3に画像アップロードができない

解決したいこと

エラーを解消して画像をアップロードできるようにしたいです。

carrierwaveとS3を使ってプロフィール画像をAWSのS3に保存できるようにしようと思いコードを組んでいます。
https://pikawaka.com/rails/carrierwave
この記事を参考に作ってます。

発生している問題・エラー

スクリーンショット 2022-12-19 11.02.27.png

該当するソースコード

users_controller.rb
  def update
    @user = User.find_by(id: params[:id])
    @user.name = params[:name]
    @user.email = params[:email]
    @user.avatar = params[:avatar]
    
    if @user.save
      flash[:notice] = "ユーザー情報を編集しました"
      redirect_to("/users/#{@user.id}")
    else
      render("users/edit")
    end
  end

carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage :fog
    config.fog_provider = 'fog/aws'
    config.fog_directory  = 'バケット名'
    config.fog_public = false
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: ENV['アクセスID'], 
      aws_secret_access_key: ENV['シークレットID'], 
      region: 'ap-northeast-1',
      path_style: true
    }
  else 
    config.storage :file
    config.enable_processing = false if Rails.env.test?
  end
end
avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
   include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  # storage :file
  storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Provide a default URL as a default if there hasn't been a file uploaded:
  def default_url(*args)
    #   # For Rails 3.1+ asset pipeline compatibility:
    #   # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
      "default.jpeg"
    #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  end

  process :resize_to_limit => [700, 700]

  # Process files as they are uploaded:
  # process scale: [200, 300]
  #
  # def scale(width, height)
  #   # do something
  # end

  # Create different versions of your uploaded files:
  # version :thumb do
  #   process resize_to_fit: [50, 50]
  # end

  # Add an allowlist of extensions which are allowed to be uploaded.
  # For images you might use something like this:
   def extension_allowlist
     %w(jpg jpeg gif png)
   end

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  # def filename
  #   "something.jpg" if original_filename
  # end
end

0 likes

1Answer

Comments

  1. @NetaNeta0620

    Questioner

    is not a recognized providerで検索をかけて出てきた記事をいくつか試したのですがダメでした
    AWSの設定意外で他に怪しいところわかりませんでしょうか?

Your answer might help someone💌