wicked_pdf_image_tag преобразуется в общую папку при поиске изображений - PullRequest
1 голос
/ 20 июня 2019

Я хочу отобразить изображение, которое пользователь загружает в PDF. Я сохраняю образ в текущую директорию Rails public.

Изображения в настоящий момент сохраняются в общей папке. В разработке все работает, но в производстве он думает, что изображение является частью активов, и выдает ошибку «изображение не в активах». В процессе разработки он ищет правильный путь в общей папке. В производстве с кодом ниже, он смотрит на public/public для изображения.

Это код, который, на мой взгляд, отображает PDF.


    <% @images.each do |image| %>
      <% if Rails.env != "development" %>
        <%= wicked_pdf_image_tag ("public/#{image.original_filename}")%>
      <% else %>
        <%= wicked_pdf_image_tag(image.original_filename)%>
      <% end %>

    <% end %>

Я пытался использовать

wicked_pdf_image_tag("public/#{image.original_filename}")

, но возвращает ошибку активов, поскольку просматривает папку public / assets.

Я также пытался использовать

wicked_pdf_image_tag("/public#{image.original_filename}")

но это приводит к общедоступной / публичной папке, в которой изображение находится не внутри, а на один уровень выше.

Когда я пытаюсь получить изображение, я ожидаю, что wicked_pdf_image_tag просмотрит папку public/ для изображения.

1 Ответ

2 голосов
/ 20 июня 2019

wicked_pdf_image_tag является сокращением для image_tag с разрешением пути ресурса с помощью злых правил pdf (см. wicked_pdf / wicked_pdf_helper / assets.rb ):

def wicked_pdf_image_tag(img, options = {})
  image_tag wicked_pdf_asset_path(img), options
end

def wicked_pdf_asset_path(asset)
  if (pathname = asset_pathname(asset).to_s) =~ URI_REGEXP
    pathname
  else
    "file:///#{pathname}"
  end
end

Поэтому, когда вынужны некоторые изменения, ничто не мешает вам использовать image_tag напрямую с правильным URL-адресом / путем к изображению.Загвоздка в том, что wicked_pdf нужен абсолютный путь к файлу в локальной файловой системе для рендеринга (и простой URL-адрес изображения для предварительного просмотра html):

image_tag "file://#{File.expand_path("public/your_image_path_goes_here.jpg")}"

Также отметим, что original_filename не является именем этого файла в вашем хранилище,это имя файла на клиентском компьютере во время загрузки.Вам нужно использовать путь к хранилищу, это зависит от вашей загружаемой библиотеки, например, для Paperclip это будет выглядеть как yourmodel.image.path

...