質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Amazon S3

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

Q&A

0回答

869閲覧

ActiveStorageのアップロードで10回に1回ほど出るNoMethodError

9ever

総合スコア10

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Amazon S3

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

1グッド

1クリップ

投稿2021/09/27 12:13

編集2022/01/12 10:55

アプリの中で書類をS3にアップロードする機能を作っています。
試しに新機能のActiveStorageを使っていますが、エラーに当たってしまいました。

環境

Ruby 2.6.7
Rails 6.1.4.1
activestorage (6.1.4.1)
Amazon S3

エラー

書類(Paper)オブジェクトを作成と同時にparamsからファイルを取ってAmazonS3へアップロードするようにしています。
ただ、Seedを何度もしていたところ、普段見ないエラーが出て気づいたのですが、
Paperオブジェクト作成時に時に10回に1回ほどエラーが出ることがわかりました。

NoMethodError in PapersController#create
undefined method `attachment_reflections' for nil:NilClass

イメージ説明

エラーが出る箇所

Controllers/PapersController.rb

class PapersController < ApplicationController ︙ def create @paper = Paper.new(new_paper_params) if @paper.save! redirect_to input_paper_url(@paper) else render :new end end ︙ def new_paper_params params.require(:paper).permit(:name).merge(company: current_company).merge(pdf: params[:paper][:pdf]) end ︙ end

models/paper.rb

Ruby:models/paper.rb

1class Paper < ApplicationRecord 2 has_one_attached :pdf 3 4 attribute :name, :string, default: '書類名未設定' 5 validates(:name, presence: true, length: {maximum: 255}) 6 validates(:pdf, attached: true, content_type: 'application/pdf') 7 validates(:keyword, length: {maximum: 65535}) 8 9 private 10 def set_id 11 while self.id.blank? || Paper.find_by(id: self.id).present? do 12 self.id = SecureRandom.hex(10) 13 end 14 end

config/environments/development.rb

Rails.application.configure do ︙ config.active_storage.service = :amazon ︙ end

ダイレクトアップロードは使っていません。
なにか問題のあるコードなのだと思いますが、解決の糸口がつかめません。

やってみたこと

ActiveStorageのアップロードは非同期らしいことはわかり、それが原因かと思い、
config/environments/development.rbに

Ruby:config/environments/development.rb

1Rails.application.configure do 23 config.active_job.queue_adapter = :inline 45end

を追記してみたのですが、エラーが出ます。

なにか他にありそうな原因だけでも思い当たる箇所がある方はいませんでしょうか?
また回避策的な解決方法でもなにかご教授いただけないでしょうか?
よろしくお願いいたします。

追記コード

db/schema.rb

Ruby:db/schema.rb

1ActiveRecord::Schema.define(version: 2021_09_27_090222) do 2 create_table "active_storage_attachments", charset: "utf8", force: :cascade do |t| 3 t.string "name", null: false 4 t.string "record_type", null: false 5 t.bigint "record_id", null: false 6 t.bigint "blob_id", null: false 7 t.datetime "created_at", null: false 8 t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" 9 t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true 10 end 11 12 create_table "active_storage_blobs", charset: "utf8", force: :cascade do |t| 13 t.string "key", null: false 14 t.string "filename", null: false 15 t.string "content_type" 16 t.text "metadata" 17 t.bigint "byte_size", null: false 18 t.string "checksum", null: false 19 t.datetime "created_at", null: false 20 t.string "service_name", null: false 21 t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true 22 end 23 24 create_table "active_storage_variant_records", charset: "utf8", force: :cascade do |t| 25 t.bigint "blob_id", null: false 26 t.string "variation_digest", null: false 27 t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true 28 end 293031 create_table "papers", id: :string, charset: "utf8", force: :cascade do |t| 32 t.string "name" 33 t.text "keyword" 34 t.datetime "created_at", null: false 35 t.datetime "updated_at", null: false 36 end 373839 add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" 40 add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" 414243end
shinoharat👍を押しています

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

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

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

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

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

shinoharat

2021/09/27 16:11

db/schema.rb の active storage に関するテーブルの定義を質問文に追加してください。 3つくらいテーブルがあると思います。
shinoharat

2021/09/27 16:57

すみません、追加で ・posts テーブルの schema ・config で primary_key_type を変更しているか? も知りたいです。 -- もっとはっきり言うと、以下のissueに該当する現象じゃないかと疑っています。 https://github.com/rails/rails/issues/40962
9ever

2021/09/28 07:50

issueの記事のご紹介ありがとうございます。 英語なので読むのに時間がかかりそうですが、読んで解決、未解決など、また回答、評価させていただきます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問