Po godzinach przechodzenia linia po linii w activestorage kodzie źródłowym i uruchamianie tych samych poleceń
@message = Message.new(message_params)
@message.save
znowu i znowu. Wciąż otrzymywaliśmy te same losowe wyniki. Następnie przeszliśmy przez szyny dzienników wydrukowane podczas dołączania obrazu do wiadomości i zaobserwowaliśmy, co następuje:
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
był ustawiony jako 534736
, zamiast uuid. Tutaj popełniliśmy błąd.
Pamięć aktywna oczekiwała klucza obcego w postaci liczby całkowitej do naszego modelu wiadomości i chcieliśmy, aby zamiast tego używała identyfikatorów uuid. Musieliśmy więc naprawić naszą migrację, używając identyfikatorów uuid zamiast całkowitych kluczy obcych.
Rozwiązanie:
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
Mam nadzieję, że to pomoże, komuś podobnemu problemowi. okrzyki!