У меня есть вложение, которое передается через веб-интерфейс через сериализатор следующим образом.
module NameOfSerializer
class Base < ActiveModel::Serializer
attributes :id,
...
...
...
:attachment_url
def attachment_url
Rails.application
.routes.url_helpers
.rails_blob_url(object.attachment, host: ENV['HOST_URL'])
end
end
end
На стадии разработки и подготовки он работает отлично.Я могу скопировать вставить URL, и можно открыть и просмотреть вложение.Но на производстве он показывает страницу с ошибкой 404.
Это то, что я нашел в журнале AWS Elastic Beanstalk.
[2019-02-04T03:50:38.733073 #16644] INFO -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] Started GET "/rails/active_storage/blobs/insert_signed_id_here/20190131_214818%20copy%202.jpg" at 2019-02-04 03:50:38 +0000
I, [2019-02-04T03:50:38.736005 #16644] INFO -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] Processing by ActiveStorage::BlobsController#show as JPEG
I, [2019-02-04T03:50:38.736056 #16644] INFO -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] Parameters: {"signed_id"=>"insert the signed_id here", "filename"=>"20190131_214818 copy 2"}
D, [2019-02-04T03:50:38.737552 #16644] DEBUG -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] [1m[36mActiveStorage::Blob Load (0.9ms)[0m [1m[34mSELECT "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = $1 LIMIT $2[0m [["id", 16], ["LIMIT", 1]]
I, [2019-02-04T03:50:38.737936 #16644] INFO -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] Completed 404 Not Found in 2ms (ActiveRecord: 0.9ms)
F, [2019-02-04T03:50:38.740120 #16644] FATAL -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc]
F, [2019-02-04T03:50:38.740163 #16644] FATAL -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] ActiveRecord::RecordNotFound (Couldn't find ActiveStorage::Blob with 'id'=16):
F, [2019-02-04T03:50:38.740185 #16644] FATAL -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc]
F, [2019-02-04T03:50:38.740215 #16644] FATAL -- : [4ca0d491-66cc-4594-9db4-75da533d2fbc] activerecord (5.2.0) lib/active_record/core.rb:177:in `find'
Я был удивлен, увидев, что в журнале написано Blobс идентификатором 16
не найден, но когда я запустил rails c
на Elastic Beanstalk, я нашел каплю.Я также проверил другой способ получения файла из S3 в консоли rails, запустив attachment.service_url
.Я был в состоянии получить доступ к приложению.Не столкнулся с 404 ошибками.
Есть идеи?Я сталкивался с этой проблемой ранее, и для этой проблемы я перешел на использование service_url
, но я хотел бы знать, что приводит к тому, что rails_blob_url
не работает в производственной среде.