※他質問サイトでも同様の質問をしています。解決した場合はそちらも更新します。よろしくお願いします。
前提
railsでDM機能を作成しています。
ActiveStorageを使用してS3に画像ファイルをアップロードし、送信した画像を表示したいのですが、実装中に以下のエラーメッセージが発生しました。
ActiveStorage、S3のセットアップは以下を参考にして設定しました。
https://zenn.dev/kurao/articles/ce8e583450c76e
実現したいこと
メッセージフォームから送信した画像をメッセージ一覧に表示したい。
発生している問題・エラーメッセージ
localhost:3000の内容 Error storing "(ファイル名)". Status: 0
メッセージフォームから画像を選択して送信を押すと、このようなエラーメッセージがポップアップで表示され、画像をアップロードできません。
該当のソースコード
config/environment/development.rb
1Rails.application.configure do 2 # ... 3 4 config.active_storage.service = :amazon 5 6 # ... 7 8 Rails.application.routes.default_url_options[:host] = 'localhost' 9 Rails.application.routes.default_url_options[:port] = 3001 10end
db/migrate/(日付)_create_active_storage_tables.active_storage.rb
1class CreateActiveStorageTables < ActiveRecord::Migration[5.2] 2 def change 3 create_table :active_storage_blobs do |t| 4 t.string :key, null: false 5 t.string :filename, null: false 6 t.string :content_type 7 t.text :metadata 8 t.bigint :byte_size, null: false 9 t.string :checksum, null: false 10 t.datetime :created_at, null: false 11 12 t.index [ :key ], unique: true 13 end 14 15 create_table :active_storage_attachments do |t| 16 t.string :name, null: false 17 t.references :record, null: false, polymorphic: true, index: false 18 t.references :blob, null: false 19 20 t.datetime :created_at, null: false 21 22 t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true 23 t.foreign_key :active_storage_blobs, column: :blob_id 24 end 25 end 26end
config/storage.yml
1amazon: 2 service: S3 3 access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %> 4 secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %> 5 region: <%= Rails.application.credentials.dig(:aws, :s3, :region) %> 6 bucket: <%= Rails.application.credentials.dig(:aws, :s3, :bucket) %>
app/models/message.rb
1class Message < ApplicationRecord 2(省略) 3 has_one_attached :image 4end
app/views/rooms/show.html.erb
1<div class="row my-5"> 2(省略) 3 <% if @messages.present? %> 4(省略) 5<!-- 画像を表示するコード --> 6 <%= image_tag @message.image.variant(resize:'500x500'), class: 'message-image' if @message.image.attached? %> 7<!-- --> 8 9 <% else %> 10 <p>メッセージはまだありません。</p> 11 <% end %> 12 13 14 <%= form_with model: @message do |f| %> 15(省略) 16<!-- 画像を選択するコード --> 17 <div class="field"> 18 <%= f.file_field :images, direct_upload: true, multiple: true %> 19 </div> 20<!-- --> 21 22 <div class="form-group"> 23 <%= f.submit "送信", class: "btn btn-primary" %> 24 </div> 25 <% end %> 26</div> 27
messages_controller.rb
試したこと
ActiveStorage、S3のセットアップに問題があると思い、エラーメッセージを検索しましたが、該当するページが見当たらず、お力添えをいただきたいです。
補足情報(FW/ツールのバージョンなど)
ruby '3.0.2'
rails ' 6.0.4'
-追記(20220329)
@messageがsaveされる前にbinging.pryを設置してエラーをチェックした結果、以下が表示されました。
※一部伏せ字にしています。
Started POST "/rails/active_storage/direct_uploads" for 192.168.160.1 at <日時> +0000 Cannot render console from 192.168.160.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 Processing by ActiveStorage::DirectUploadsController#create as JSON Parameters: { "blob" => { "filename" => "<ファイル名>", "content_type" => "image/png", "byte_size" => 30047, "checksum" => "<checksumの文字列>" }, "direct_upload" => { "blob" => { "filename" => "<ファイル名>", "content_type" => "image/png", "byte_size" => 30047, "checksum" => "<checksumの文字列>" } } } (0.6ms) BEGIN ActiveStorage::Blob Create (1.3ms) INSERT INTO `active_storage_blobs` ( `key` ,`filename` ,`content_type` ,`byte_size` ,`checksum` ,`created_at` ) VALUES ( '<キー>' ,'<ファイル名>' ,'image/png' ,30047 ,'<checksumの文字列>' ,'<日時>' ) (5.8ms) COMMIT S3 Storage (1.6ms) Generated URL for file at key: <キー> (https://<バケット名>.s3.<リージョン名>.amazonaws.com/<キー>?X-Amz -Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<アクセスキーID>%2F<日付>%2F<リージョン名>%2Fs3%2Faws4_request&X-Amz-Date=<日付>T<時間>Z&X-Amz-Expires=300&X-Amz-Signe dHeaders=content-length%3Bcontent-md5%3Bcontent-type%3Bhost&X-Amz-Signature=01c10359b86d5cf1ef020d0286e428762f907fd7d6a7db1b8a2ed0c5daf08c8e) Completed 200 OK in 1043ms (Views: 0.7ms | ActiveRecord: 12.0ms | Allocations: 231324)
Cannot render console from <IPアドレス>! のエラーが出ていましたので、以下記事を参考に
config/environment/development.rb
にホワイトリストを追記しましたが、同様のエラーが表示され解決に至りませんでした。
https://qiita.com/terufumi1122/items/73da039e6fc90ee0a63f
↓追加したホワイトリスト
Rails.application.configure do config.web_console.whitelisted_ips = '192.168.160.1' (略) end
-追記(20220402)
Dockerfile
1FROM ruby:3.0.2 2RUN apt-get update -qq && apt-get install -y nodejs 3 4# yarnパッケージ管理ツールをインストール 5# https://classic.yarnpkg.com/en/docs/install/#debian-stable 6RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - 7RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list 8RUN apt-get update && apt-get install yarn 9 10RUN apt-get install -y vim 11 12WORKDIR /myapp 13COPY Gemfile /myapp/Gemfile 14COPY Gemfile.lock /myapp/Gemfile.lock 15RUN bundle install 16COPY . /myapp 17 18# Add a script to be executed every time the container starts 19COPY entrypoint.sh /usr/bin/ 20RUN chmod +x /usr/bin/entrypoint.sh 21ENTRYPOINT ["entrypoint.sh"] 22EXPOSE 3000 23 24# Start the main process. 25CMD ["rails", "server", "-b", "0.0.0.0"]
docker−compose.yml
1version: "3" 2 3services: 4 db: 5 image: mysql:8.0 6 7 command: mysqld --default-authentication-plugin=mysql_native_password 8 environment: 9 MYSQL_USER: user 10 MYSQL_PASSWORD: password 11 MYSQL_ROOT_PASSWORD: password 12 ports: 13 - 3306:3306 14 volumes: 15 - ./tmp/db:/var/lib/mysql 16 web: 17 build: . 18 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 19 environment: 20 MYSQL_HOST: db 21 volumes: 22 - .:/myapp 23 ports: 24 - "3000:3000" 25 depends_on: 26 - db 27 tty: true 28 stdin_open: true
-追記(20220404)
-追記(20220404) CORSの設定

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