Sau nhiều giờ đọc từng dòng trong activestorage mã nguồn và chạy các lệnh tương tự
@message = Message.new(message_params)
@message.save
lặp đi lặp lại. Chúng tôi nhận được cùng một kết quả ngẫu nhiên lặp đi lặp lại. Sau đó, chúng tôi xem xét các đường ray nhật ký được in trong khi đính kèm hình ảnh vào tin nhắn và quan sát thấy những điều sau:
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
đã được đặt là 534736
, thay vì một uuid. Đây là nơi chúng tôi đã sai.
Bộ nhớ đang hoạt động mong đợi khóa ngoại là số nguyên cho mô hình Thư của chúng tôi và chúng tôi muốn mô hình này sử dụng uuids thay thế. Vì vậy, chúng tôi đã phải khắc phục sự cố di chuyển của mình, sử dụng uuids thay vì các khóa ngoại số nguyên.
Giải pháp:
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
Hy vọng điều này sẽ giúp, ai đó đang đối mặt với các vấn đề tương tự. chúc mừng!