gpt4 book ai didi

ruby-on-rails - ActiveStorage 的 rails_blob_url 返回一个链接,该链接显示打开时出现 404 错误的页面

转载 作者:行者123 更新时间:2023-12-04 17:41:01 26 4
gpt4 key购买 nike

我有一个附件,它通过序列化程序传递到前端,如下所示。

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'

我很惊讶地看到日志显示没有找到 ID 为 16 的 Blob,但是当我在 Elastic Beanstalk 上运行 rails c 时,我找到了这个 blob .我还测试了另一种通过运行 attachment.service_url 在 Rails 控制台中从 S3 检索文件的方法。我能够访问附件。没有遇到 404 错误。

有什么想法吗?我之前遇到过这个问题,对于那个问题,我改为使用 service_url 但我想知道是什么导致 rails_blob_url 无法在生产环境中工作。

最佳答案

我刚遇到这个。这是我为我的项目修复它的方法。

首先,我使用 Amazon S3 进行生产,还有开发。第二部分至关重要。

换句话说,我的 config/environments/development.rb 有这个:

# Store uploaded files on the local file system (see config/storage.yml for options).
# config.active_storage.service = :local
config.active_storage.service = :amazon

但是,仅此还不够。出于某种原因,Rails 仍然在生成 url 时尝试使用 local

解决方法是删除 local 配置。这是我的 storage.yml 之后的样子:

# THE FIX: COMMENTED THIS OUT
# local:
# service: Disk
# root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: us-east-2
bucket: xxx

重启服务器后,一切正常。

关于ruby-on-rails - ActiveStorage 的 rails_blob_url 返回一个链接,该链接显示打开时出现 404 错误的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54510226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com