sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails 5.2 ActiveStorage med UUID på Postgresql

Efter timmars gång rad för rad i activestorage källkoden , och kör samma kommandon

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

igen och igen. Vi fick samma slumpmässiga resultat om och om igen. Sedan gick vi igenom loggskenorna som skrevs ut medan vi bifogade bilden till meddelandet och observerade följande:

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 ställdes in som 534736 , istället för en uuid. Här gick vi fel.

Aktiv lagring förväntade sig heltals främmande nyckel till vår meddelandemodell, och vi ville att den skulle använda uuids istället. Så vi var tvungna att fixa vår migrering, för att använda uuids istället för heltals främmande nycklar.

Lösning:

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

Hoppas detta hjälper, någon som har liknande problem. heja!



  1. Jämför RDS vs EC2 för att hantera MySQL eller MariaDB på AWS

  2. PySpark sqlContext läste Postgres 9.6 NullPointerException

  3. Hur man öppnar en databas i exklusivt läge i Access 2016

  4. Gör ett intervall i postgres