У меня есть небольшое приложение на Rails, которое отлично работает локально, загружая файл docx с помощью ActiveStorage и конвертируя его в html (среди прочего).Чтобы развернуть это в Heroku, мне нужно перейти от использования локальной файловой системы для хранения к использованию S3 и, таким образом, изменить способ генерации пути к файлу.
Мое исследование показывает, что rails_blob_path
(или _url
) должно быть тем, что мне нужно, но я получаю ошибку "файл не найден", даже если путь к файлу работает, когда я пытаюсь сделать это вручную.
Как мне сгенерировать путь для прикрепленного файла, который я могу использовать для дальнейшего преобразования?Документы говорят, что это просто, но я не могу заставить его работать!
В моем приложении есть проекты, к каждому из которых должен быть прикреплен файл через ActiveStorage.После создания проекта (с приложенным файлом) файл обрабатывается, и его содержимое отображается для пользователя (извлечение текста из файла Word, сопоставление его со списками слов и сохранение полученного HTML и списков слов для дальнейшего руководства).редактирование пользователем).
Мой оригинальный подход состоял в том, чтобы этот метод был в модели проекта:
def real_file_path
ActiveStorage::Blob.service.send(:path_for, file.key)
end
А затем в контроллере я вызвал этот метод для выполнения фактического преобразования:
def convert_docx_file
_file_contents = ''
_doc = Docx::Document.open(@project.real_file_path)
_doc.paragraphs.each do |p|
_file_contents += p.to_html
end
@project.update_attributes(file_contents: _file_contents)
end
(При этом используется гем DOCX для создания подходящего объекта, а затем итерации по нему и преобразования абзацев в HTML.)
Теперь проблематичным шагом является создание _doc.объект.Приведенный выше код отлично работает на локальной файловой системе.Для использования S3, после значительного количества исследований и экспериментов, я изменил его на:
.
.
_doc = Docx::Document.open(rails_blob_path(@project.file))
.
.
.
При запуске на моей локальной машине это выдает ошибку: Zip::Error in ProjectsController#show
File /rails/active_storage/blobs/BLAH_BLAH_BLAH/original%20file.docx not found
.Но когда я затем копирую и вставляю адрес в браузер, он загружается нормально.
Может кто-нибудь дать мне знать, как получить правильный путь к файлу, чтобы я мог снова выполнить преобразование?