sql >> データベース >  >> RDS >> PostgreSQL

Rails5.2Postgresql上のUUIDを使用したActiveStorage

    activestorage ソースコード で何時間も行ごとに移動した後 、同じコマンドを実行する

    @message = Message.new(message_params)
    @message.save
    

    何回も何回も。同じランダムな結果が何度も得られました。次に、画像をメッセージに添付しながら印刷されたログレールを調べ、次のことを確認しました。

    S3 Storage (363.4ms) Uploaded file to key: KBKeHJARTjnsVjkgSbbii4Bz (checksum: S0GjR1EyvYYbMKh44wqlag==)
    
    ActiveStorage::Blob Create (0.4ms)  INSERT INTO "active_storage_blobs" ("key", "filename", "content_type", "metadata", "byte_size", "checksum", "created_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"  [["key", "KBKeHJARTjnsVjkgSbbii4Bz"], ["filename", "sample.pdf"], ["content_type", "application/pdf"], ["metadata", "{\"identified\":true}"], ["byte_size", 3028], ["checksum", "S0GjR1EyvYYbMKh44wqlag=="], ["created_at", "2018-07-26 04:54:33.029769"]]
    
    ActiveStorage::Attachment Create (2.7ms)  INSERT INTO "active_storage_attachments" ("name", "record_type", "record_id", "blob_id", "created_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["name", "file"], ["record_type", "Message"], ["record_id", "534736"], ["blob_id", "0"], ["created_at", "2018-07-26 05:04:35.958831"]]
    

    record_id 534736として設定されていました 、uuidの代わりに。ここが私たちが間違っていたところです。

    アクティブストレージはメッセージモデルに整数の外部キーを期待していたため、代わりにuuidを使用する必要がありました。 そのため、整数の外部キーの代わりにuuidを使用するように、移行を修正する必要がありました。

    解決策:

    class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
      def change
        create_table :active_storage_blobs, id: :uuid do |t|
          t.string   :key,        null: false
          t.string   :filename,   null: false
          t.string   :content_type
          t.text     :metadata
          t.bigint   :byte_size,  null: false
          t.string   :checksum,   null: false
          t.datetime :created_at, null: false
    
          t.index [ :key ], unique: true
        end
    
        create_table :active_storage_attachments, id: :uuid do |t|
          t.string     :name,     null: false
          t.references :record,   null: false, polymorphic: true, index: false, type: :uuid
          t.references :blob,     null: false, type: :uuid
    
          t.datetime :created_at, null: false
    
          t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
        end
      end
    end
    

    これがお役に立てば幸いです。誰かが同様の問題に直面しています。乾杯!



    1. PHPでセッション配列をループする方法

    2. MySQLを使用した.NETCore2.0:指定されたキーが長すぎました。キーの最大長は3072バイトです

    3. SQL Server-[SELECT]は[UPDATE]をロックしますか?

    4. phpMyAdminを使用してデータベースを複製する方法