PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgresql पर UUIDs के साथ रेल 5.2 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 का उपयोग करे। इसलिए हमें अपने माइग्रेशन को ठीक करना पड़ा, पूर्णांक विदेशी कुंजियों के बजाय यूयूआईडी का उपयोग करने के लिए।

समाधान:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कई-से-अनेक SQL-कीमिया और Postgresql से हटाना

  2. Postgresql में मूविंग एवरेज

  3. FATAL को कैसे हल करें:गैर-सुपरयूज़र के लिए कनेक्शन की सीमा पार हो गई

  4. जब एसएसएल समर्थन विदेशी डेटा रैपर का उपयोग करके संकलित नहीं किया जाता है तो एसएसएलमोड मान को पोस्टग्रेज करना अमान्य है

  5. डेटाबेस में डिफ़ॉल्ट मान का Django कार्यान्वयन