Rails 6 Active Storage Attachment 404 не найден - PullRequest
1 голос
/ 14 июля 2020

Я столкнулся с очень странной проблемой в моем приложении Rails 6 с Active Storage.

Вы можете добавить PDF-файл в отзыв, который хранится через Active Storage - в разработке это работает без проблем, вы можете сохранить и открыть его.

Он вроде работает и в производственной среде, но проблема возникает, когда я повторно развертываю приложение с помощью Capistrano. Перед развертыванием все файлы, сохраненные до этого момента, отображаются без проблем. После повторного развертывания файлы, хранящиеся ДО, больше не обнаруживаются - без каких-либо изменений в базе данных.

Это мой код просмотра (я также пробовал с url_for, rails_blob_path и service_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 что ли?

1 Ответ

0 голосов
/ 14 июля 2020

Хорошо, покопавшись в некоторых исследованиях, я выяснил, почему это произошло - я попытаюсь объяснить это на случай, если у кого-то могут возникнуть аналогичные проблемы при развертывании с помощью Capistrano.

Итак, это не напрямую Rails или проблема, связанная с Active Storage. Я использую локальное хранилище для своих вложений, поэтому я не храню их на Amazon или Google или Azure - местом хранения этих вложений по умолчанию является папка storage в root приложения - поэтому я проверил 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 по умолчанию только содержимое внутри папки игнорируется 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'

Если этот параметр установлен, папка не будет перезаписываться при каждом развертывании, вместо этого она будет совместно использоваться между выпусками, и ранее загруженные файлы будут оставайтесь доступными.

Надеюсь, это поможет кому-нибудь в будущем, если вы спросите себя, почему ваши файлы исчезают: ').

...