##実現したいこと
作成しているブログアプリに画像アップ機能を搭載しようとしています。
初期段階として、画像をアップする機能は開発、本番環境共に作れたのですが、s3に保存をしようとしてもできなくなりました。
【AWS】ローカル環境の画像保存先をS3に変更する方法を1から解説を参考にまずは開発環境で画像の保存先をs3に変更したいと考えています。
##エラー
localhost:3000などアプリケーションの大半のページは問題なく動作するのですが、記事投稿画面で投稿の送信をしようとすると下記のエラーが発生します。
chrome
1ArgumentError in PostsController#create 2 3Missing required arguments: aws_access_key_id, aws_secret_access_key
##原因になってそうな?コード
PostsController
1def create 2 post = Post.new(post_params) 3 post.user_id = current_user.id 4 if post.save 5 flash[:success] = '投稿が送信されました' 6 redirect_to post 7 else 8 redirect_to new_post_path, flash: { 9 post: post, 10 error_messages: post.errors.full_messages 11 } 12 end 13 14 end
postModel
1class Post < ApplicationRecord 2 belongs_to :user 3 4 has_many :comments, dependent: :delete_all 5 6 validates :body, presence: true 7 8 attachment :image 9 10 mount_uploader :image, ImageUploader 11end 12
carrierwave
1 2require 'carrierwave/storage/abstract' 3require 'carrierwave/storage/file' 4require 'carrierwave/storage/fog' 5 6 7CarrierWave.configure do |config| 8 9 config.storage = :fog 10 config.fog_provider = 'fog/aws' 11 config.fog_credentials = { 12 provider: 'AWS', 13 aws_access_key_id: Rails.application.secrets.aws_access_key_id, 14 aws_secret_access_key: Rails.application.secrets.aws_secret_access_key, 15 region: 'ap-northeast-1' 16 } 17 18 19 config.fog_directory = 'バケット名' #実際にちゃんと記載しています。 20 config.asset_host = 'バケットURL' #実際にちゃんと記載しています。 21end 22
ImageUploader
1class ImageUploader < CarrierWave::Uploader::Base 2 if Rails.env.development? 3 storage :fog 4 elsif Rails.env.test? 5 storage :file 6 else 7 storage :fog 8 end 9 10 def store_dir 11 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 12 end 13 14 def extension_whitelist 15 %w(png jpg) 16 end 17 18 def filename 19 original_filename if original_filename 20 end 21end
secrets
1# Be sure to restart your server when you modify this file. 2 3# Your secret key is used for verifying the integrity of signed cookies. 4# If you change this key, all old signed cookies will become invalid! 5 6# Make sure the secret is at least 30 characters and all random, 7# no regular words or you'll be exposed to dictionary attacks. 8# You can use `rails secret` to generate a secure secret key. 9 10# Make sure the secrets in this file are kept private 11# if you're sharing your code publicly. 12 13development: 14 secret_key_base: 文字列・・・・・ 15 aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> 16 aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %> 17 18test: 19 secret_key_base: 文字列・・・・・ 20 21 # Do not keep production secrets in the repository, 22 # instead read values from the environment. 23production: 24 secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 25
また、gemfileにはgem 'carrierwave'とgem 'fog-aws'を記述の上でbundle installも行っています。
##環境
ruby 2.5.0
rails 5.2.4.1
gemをfog-awsからfogにしてみたり、試してみたのですがうまく行きませんでした。
何か心当たりがあったら、なんでも構いませんので、ご教示願います。
あなたの回答
tips
プレビュー