gpt4 book ai didi

ruby-on-rails - 未找到 Rails 6 事件存储附件 404

转载 作者:行者123 更新时间:2023-12-05 01:11:33 35 4
gpt4 key购买 nike

我在使用 Active Storage 的 Rails 6 应用程序中遇到了一个非常奇怪的问题。

您可以将 PDF 文件添加到反馈中,该文件通过 Active Storage 存储 - 在开发中这没有问题,您可以保存并打开它。

它在生产中也能正常工作,但是当我使用 Capistrano 重新部署应用程序时出现问题。在部署之前,到目前为止保存的所有文件都可以毫无问题地显示出来。重新部署后,不再找到之前存储的文件 - 数据库没有任何更改。

这是我的 View 代码(我也尝试通过 Controller 使用 url_forrails_blob_pathservice_url)

这就是我的日志在重新部署之前所说的(成功显示文件):

Started GET "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhNREZuWjJNek9HeDZNV1ZvT0RWaFkyZDFkVGQ2YW04NU5XdzBkQVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpWkdsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SWxkbFlrMWxiblZsSUZCeWIzTmxiblJoZEdsdmJpNXdaR1lpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjFkbFlrMWxiblZsSlRJd1VISWxRek1sUWpWelpXNTBZWFJwYjI0dWNHUm1CanNHVkRvUlkyOXVkR1Z1ZEY5MGVYQmxTU0lVWVhCd2JHbGpZWFJwYjI0dmNHUm1CanNHVkE9PSIsImV4cCI6IjIwMjAtMDctMTRUMTg6MDg6MjIuOTQ5WiIsInB1ciI6ImJsb2Jfa2V5In19--0a52cfc77ce14105dc290ff569d50b637231f613/WebMenue%20Pr%C3%B5sentation.pdf?content_type=application%2Fpdf&disposition=inline%3B+filename%3D%22WebMenue+Prosentation.pdf%22%3B+filename%2A%3DUTF-8%27%27WebMenue%2520Pr%25C3%25B5sentation.pdf" for 172.16.118.100 at 2020-07-14 20:03:48 +0200

Processing by ActiveStorage::DiskController#show as PDF

Parameters: {"content_type"=>"application/pdf", "disposition"=>"inline; filename=\"WebMenue Prosentation.pdf\"; filename*=UTF-8''WebMenue%20Pr%C3%B5sentation.pdf", "encoded_key"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhNREZuWjJNek9HeDZNV1ZvT0RWaFkyZDFkVGQ2YW04NU5XdzBkQVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpWkdsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SWxkbFlrMWxiblZsSUZCeWIzTmxiblJoZEdsdmJpNXdaR1lpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjFkbFlrMWxiblZsSlRJd1VISWxRek1sUWpWelpXNTBZWFJwYjI0dWNHUm1CanNHVkRvUlkyOXVkR1Z1ZEY5MGVYQmxTU0lVWVhCd2JHbGpZWFJwYjI0dmNHUm1CanNHVkE9PSIsImV4cCI6IjIwMjAtMDctMTRUMTg6MDg6MjIuOTQ5WiIsInB1ciI6ImJsb2Jfa2V5In19--0a52cfc77ce14105dc290ff569d50b637231f613", "filename"=>"WebMenue Prõsentation"}

Completed 304 Not Modified in 1ms (ActiveRecord: 0.0ms | Allocations: 370)

然后,在重新部署后,我在完全相同的文件上收到此 404 not found 错误:

Started GET "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhNREZuWjJNek9HeDZNV1ZvT0RWaFkyZDFkVGQ2YW04NU5XdzBkQVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpWkdsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SWxkbFlrMWxiblZsSUZCeWIzTmxiblJoZEdsdmJpNXdaR1lpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjFkbFlrMWxiblZsSlRJd1VISWxRek1sUWpWelpXNTBZWFJwYjI0dWNHUm1CanNHVkRvUlkyOXVkR1Z1ZEY5MGVYQmxTU0lVWVhCd2JHbGpZWFJwYjI0dmNHUm1CanNHVkE9PSIsImV4cCI6IjIwMjAtMDctMTRUMTg6MTI6MzQuNTE3WiIsInB1ciI6ImJsb2Jfa2V5In19--9d281265e57a7c0d3cd53af1f8e1a6e098605d3c/WebMenue%20Pr%C3%B5sentation.pdf?content_type=application%2Fpdf&disposition=inline%3B+filename%3D%22WebMenue+Prosentation.pdf%22%3B+filename%2A%3DUTF-8%27%27WebMenue%2520Pr%25C3%25B5sentation.pdf" for 172.16.118.100 at 2020-07-14 20:07:34 +0200

Processing by ActiveStorage::DiskController#show as PDF

Parameters: {"content_type"=>"application/pdf", "disposition"=>"inline; filename=\"WebMenue Prosentation.pdf\"; filename*=UTF-8''WebMenue%20Pr%C3%B5sentation.pdf", "encoded_key"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhNREZuWjJNek9HeDZNV1ZvT0RWaFkyZDFkVGQ2YW04NU5XdzBkQVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpWkdsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SWxkbFlrMWxiblZsSUZCeWIzTmxiblJoZEdsdmJpNXdaR1lpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSjFkbFlrMWxiblZsSlRJd1VISWxRek1sUWpWelpXNTBZWFJwYjI0dWNHUm1CanNHVkRvUlkyOXVkR1Z1ZEY5MGVYQmxTU0lVWVhCd2JHbGpZWFJwYjI0dmNHUm1CanNHVkE9PSIsImV4cCI6IjIwMjAtMDctMTRUMTg6MTI6MzQuNTE3WiIsInB1ciI6ImJsb2Jfa2V5In19--9d281265e57a7c0d3cd53af1f8e1a6e098605d3c", "filename"=>"WebMenue Prõsentation"}

Completed 404 Not Found in 2ms (ActiveRecord: 0.0ms | Allocations: 799)

知道这里发生了什么吗?可能是 NGINX 文件缓存或其他问题?

最佳答案

好的,在深入研究之后,我发现了为什么会发生这种情况 - 我将尝试解释它,以防有人在使用 Capistrano 进行部署时遇到类似问题。

因此,这不是直接与 Rails 或 Active Storage 相关的问题。我为我的附件使用本地存储,所以我不将它们存储在 Amazon、Google 或 Azure 上——这些附件的默认存储位置是应用程序根目录中的“storage”文件夹——所以我检查了 storage .yml:

local:
service: Disk
root: <%= Rails.root.join("storage") %>

在我的 production.rb 中:

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

我的问题如下:默认情况下,此文件夹本身添加到 .gitignore,仅inside 文件夹的内容被忽略由 git 。因此,每次执行 git push 时,我都会将一个空的存储文件夹推送到我的存储库。这当然会覆盖以前在生产中使用 Capistrano 的每次部署中使用的存储文件夹。

在我的案例中解决问题的方法是将存储文件夹添加到 linked_dirs 数组,您可以在 deploy.rb 中指定:

append :linked_dirs, 'log', 'storage', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', '.bundle', 'public/system', 'public/uploads', 'node_modules'

设置此选项后,该文件夹不会在每次部署时被覆盖,而是会在版本之间共享,并且之前上传的文件仍可访问。

如果你问自己为什么你的文件消失了,我希望这对将来的人有所帮助:')。

关于ruby-on-rails - 未找到 Rails 6 事件存储附件 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62900328/

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