🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Storage+

Storage+は、IT業界団体CompTIA認定の資格で、ストレージに関する知識を証明します。ストレージの設計・構築~運用・管理までの知識を評価し、接続時のトラブルシューティングや基礎的なストレージ・システム管理のスキルを取得している証明になります。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1604閲覧

S3を用いたACtiveStorage

shunxile

総合スコア26

Storage+

Storage+は、IT業界団体CompTIA認定の資格で、ストレージに関する知識を証明します。ストレージの設計・構築~運用・管理までの知識を評価し、接続時のトラブルシューティングや基礎的なストレージ・システム管理のスキルを取得している証明になります。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/01/19 17:04

編集2021/01/20 00:56

前提・実現したいこと

画像や動画を添付したメッセージ投稿サイトを作成中です。
投稿機能など実装後S3での投稿に変更したところエラーメッセージが発生しました。

発生している問題・エラーメッセージ

RuntimeError in MessagesController#create Cannot load `Rails.config.active_storage.service`: Missing configuration for the :amazon Active Storage service. Configurations available for [:test, :local]

データベースには記入データが保存されていますが詳細ページに遷移しても画像データは表示されていません

Started POST "/messages" for ::1 at 2021-01-20 09:19:53 +0900 (0.3ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483 Processing by MessagesController#create as HTML Parameters: {"authenticity_token"=>"LJj60SrIJ/gF3QdWFHDEFngtOgJU2WcGyiZtrmPgzYAJO4eemjqfnIdkJu/BBHtNs+cAENC9ww/1cbmaNGbUtw==", "message_tag"=>{"title"=>"アイウエオ", "message"=>"ooooooo", "whom"=>"さしすせそ", "open_plan(1i)"=>"2025", "open_plan(2i)"=>"7", "open_plan(3i)"=>"6", "images"=>[#<ActionDispatch::Http::UploadedFile:0x00007fc1cc861790 @tempfile=#<Tempfile:/var/folders/pg/6dn2c_091hb4pfr45vz6w9fr0000gn/T/RackMultipart20210120-1154-1pq5qrm.png>, @original_filename="Railsの処理の流れ_0409.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"message_tag[images][]\"; filename=\"Rails\xE3\x81\xAE\xE5\x87\xA6\xE7\x90\x86\xE3\x81\xAE\xE6\xB5\x81\xE3\x82\x8C_0409.png\"\r\nContent-Type: image/png\r\n">], "name"=>"S3テスト"}, "commit"=>"想いを残す"} User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 (0.2ms) BEGIN ↳ app/models/message_tag.rb:21:in `save' User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/models/message_tag.rb:21:in `save' Message Create (1.1ms) INSERT INTO `messages` (`title`, `whom`, `message`, `open_plan`, `user_id`, `created_at`, `updated_at`) VALUES ('アイウエオ', 'さしすせそ', 'ooooooo', '2025-07-06', 1, '2021-01-20 00:19:53.378596', '2021-01-20 00:19:53.378596') ↳ app/models/message_tag.rb:21:in `save' ActiveStorage::Attachment Load (0.4ms) SELECT `active_storage_attachments`.* FROM `active_storage_attachments` WHERE `active_storage_attachments`.`record_id` = 82 AND `active_storage_attachments`.`record_type` = 'Message' AND `active_storage_attachments`.`name` = 'images' ↳ app/models/message_tag.rb:21:in `save' (0.5ms) ROLLBACK ↳ app/models/message_tag.rb:21:in `save' Completed 500 Internal Server Error in 39ms (ActiveRecord: 2.7ms | Allocations: 32823) RuntimeError (Cannot load `Rails.config.active_storage.service`: Missing configuration for the :amazon Active Storage service. Configurations available for [:test, :local]): app/models/message_tag.rb:21:in `save' app/controllers/messages_controller.rb:17:in `create'

該当のソースコード

new.html.erb

1<div class="new-message"> 2 <h1>残したい想い</h1> 3 <%= form_with model: @message, url: messages_path, local: true do |f| %> 4 <%= render 'shared/error_messages', model: f.object %> 5 <div class="posting-form"> 6 <div class="form"> 7 タイトル 8 <span class="indispensable">必須</span> 9 </div> 10 <%= f.text_field :title, class:"form-title", id:"form-title", placeholder:"タイトル名(必須 50文字以内)", maxlength:"50" %> 11 <div class="form"> 12 メッセージ 13 <span class="indispensable">必須</span> 14 </div> 15 <%= f.text_area :message, class:"form-message", id:"form-message", placeholder:"メッセージ内容(必須 200文字以内)例)20年後の子供の誕生日に見て欲しい動画です。" ,rows:"5", maxlength:"200" %> 16 <div class="form"> 17 誰に対してか 18 <span class="indispensable">必須</span> 19 </div> 20 <%= f.text_field :whom, class:"form-whom", id:"form-whom", placeholder:"誰に宛てたものか(必須 50文字以内)例)20年後の子どもたちへ", maxlength:"50" %> 21 <div class="form"> 22 開封予定日 23 <span class="indispensable">必須</span> 24 </div> 25 <div class="form-open-plan"> 26 <%= raw sprintf( 27 f.date_select( 28 :open_plan, 29 class: 'open-plan-object', 30 use_month_numbers: true, 31 prompt:'--', 32 start_year: (Time.now.year), 33 end_year: (Time.now.year + 100), 34 date_separator: '%s'), 35 "<p> 年 </p>", "<p> 月 </p>") + "<p> 日 </p>" %> 36 </div> 37 <div class="form-caution"> 38 ※※※画像か動画どちらか1つの投稿にしてください。※※※ 39 </div> 40 <div class="image-form"> 41 <div class="form"> 42 届ける想い(画像) 43 </div> 44 <div class="click-upload"> 45 <p>クリックしてファイルをアップロード</p> 46 <%= f.file_field :images, name: 'message_tag[images][]', id:"form-image" %> 47 <div id="image-list"></div> 48 </div> 49 </div> 50 <div class="video-form"> 51 <div class="form"> 52 届ける想い(動画) 53 </div> 54 <div class="click-upload"> 55 <p>クリックしてファイルをアップロード</p> 56 <%= f.file_field :video, id:"form-video" %> 57 </div> 58 </div> 59 <div class="tag-form"> 60 タグ 61 </div> 62 <%= f.text_field :name, id:"form-tag", placeholder:"誕生日", maxlength:"20"%> 63 </div> 64 <div class="message-btn-contents"> 65 <%= f.submit "想いを残す" ,class:"message-btn" %> 66 <%= link_to 'もどる', root_path, class:"back-btn" %> 67 </div> 68 <% end %> 69 70</div>

messages_controller.rb

1class MessagesController < ApplicationController 2 before_action :authenticate_user!, except: [:index] 3 before_action :search_message, only: [:index, :search] 4 5 def new 6 @message = MessageTag.new 7 end 8 9 def create 10 @message = MessageTag.new(message_params) 11 if @message.valid? 12 @message.save 13 return redirect_to root_path 14 else 15 render :new 16 end 17 end 18 19 def edit 20 @message = Message.find(params[:id]) 21 if current_user.id != @message.user.id 22 redirect_to root_path 23 end 24 end 25 26 def update 27 @message = Message.find(params[:id]) 28 if @message.update(message_params) 29 redirect_to message_path(@message.id) 30 else 31 render :edit 32 end 33 end 34 35 private 36 def message_params 37 params.require(:message_tag).permit(:title, :whom, :message, :open_plan, :name, :video, images: []).merge(user_id: current_user.id) 38 end 39end

message_tag.rb

1class MessageTag 2 3 include ActiveModel::Model 4 include ActiveModel::Attributes 5 include ActiveRecord::AttributeAssignment 6 attr_accessor :title, :whom, :open_plan, :message, :images, :video, :name, :user_id 7 8 with_options presence: true, length: { maximum: 50 } do 9 validates :title 10 validates :whom 11 end 12 13 with_options presence: true do 14 validates :message, length: { maximum: 200 } 15 validates :open_plan 16 validates :user_id 17 validates :name, length: { maximum: 20 } 18 end 19 20 def save 21 @message = Message.create(title: title, whom: whom, open_plan: open_plan, message: message, images: images, video: video, user_id: user_id) 22 tag = Tag.find_or_create_by(name: name) 23 24 MessageTagForm.create(message_id: message.id, tag_id: tag.id) 25 end 26end

message.rb

1class Message < ApplicationRecord 2 belongs_to :user 3 has_many_attached :images 4 has_one_attached :video 5 has_many :message_tag_forms, dependent: :destroy 6 has_many :tags, through: :message_tag_forms 7 8end

storage.yml

1test: 2 service: Disk 3 root: <%= Rails.root.join("tmp/storage") %> 4 5local: 6 service: Disk 7 root: <%= Rails.root.join("storage") %> 8 9 amazon: 10 service: S3 11 region: ap-northeast-1 12 bucket: timecapsule1260 13 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 14 secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

試したこと

環境変数の設定、sourceコマンドの入力
development.rb・production.rbのconfig.active_storage.serviceを
config.active_storage.service = :local

config.active_storage.service = :amazonに変更

S3への処理前は投稿できていました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一番最後のファイルは恐らくstorage.ymlかと思いますが、YAMLの書き方を誤っていませんか?
amazon〜以下はインデントがずれてると思います。YAMLではインデントで階層を表すのでインデントがずれてると正しく動きません。

yml

1test: 2 service: Disk 3 root: <%= Rails.root.join("tmp/storage") %> 4 5local: 6 service: Disk 7 root: <%= Rails.root.join("storage") %> 8 9amazon: 10 service: S3 11 region: ap-northeast-1 12 bucket: timecapsule1260 13 access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 14 secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>

投稿2021/01/19 23:49

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shunxile

2021/01/20 00:53

>> yu_1985さん 回答ありがとうございます。ご指摘通りインデントがずれていました。 こちらを修正したのですが別のエラーが発生したのでこちらもお聞きしてもよろしいですか? RuntimeError in MessagesController#create Cannot load `Rails.config.active_storage.service`: Missing configuration for the :amazon Active Storage service. Configurations available for [:test, :local]
yu_1985

2021/01/20 01:01

aws-sdk-s3は導入していますか?
shunxile

2021/01/20 04:17

>> yu_1985さん gem "aws-sdk-s3", require: false このようにGemfileに記述し導入しています
yu_1985

2021/01/20 04:26

amazon: の設定がリストに入ってすらいないのが気になりますが…。 設定修正後Railsを立ち上げ直しましたか? また、YAMLの書式に誤りはないですか?
shunxile

2021/01/20 04:50

>> yu_1985さん 立ち上げ直しをしていなかったみたいです、、、 もろもろ再起動したところ無事に投稿できました! ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問