Rails File.exist? возвращает false при наличии файла

Я нашел несколько сообщений здесь о File.exists? в приложении Rails, но попытки решения не помогли, я довольно новый, поэтому я должен делать что-то немое.

Я использую:

  • Rails 3.2.11
  • Ruby 1.9.3
  • Скрепка для файла, указанного ниже
  • ActiveAdmin для загрузки файла, указанного ниже.
  • Работа в среде разработки
  • Активы не предварительно скомпилированы

У меня есть модель "стиль", и у нее есть вложение изображения, я могу сделать изображение с помощью

<%= image_tag(@style.style_image) %>

и он отлично работает.

Короче говоря, я хочу проверить, действительно ли образ файла находится в папке, в которой он должен находиться: я не хочу использовать @style.style_image.present? для проверки изображений, потому что что просто проверяет запись db. Я хочу использовать File.exist?, чтобы увидеть, действительно ли файл для @style.style_image.

Итак, в моем файле просмотра у меня есть код

<% if File.exist?(@style.style_image.url) %>
The image exists.
<% else %>
The image is not here.
<% end %>

И всегда печатает "изображение не здесь" при загрузке страницы. Непосредственно ниже я показываю свое изображение с помощью image_tag, поэтому я знаю, что изображение есть.

Я также пробовал

<% if File.exist?(Rails.root + @style.style_image.url) %>

не повезло. Я также пытался использовать FileTest.exist?, FileTest.exists?, и File.exists? но никто не скажет мне правду, когда изображение определенно существует.

Есть ли что-то, что мне не хватает? Любое руководство будет оценено очень сильно. Я всего лишь несколько месяцев в Ruby и Rails, поэтому я, вероятно, пропустил что-то немое.

Ответ 1

Я думаю, вы хотите @style.style_image.path вместо .url.

Распечатайте его, чтобы быть уверенным.

Ответ 2

В любое время, когда вы имеете дело с веб-URL-адресами и файлами на диске, вы должны быть осторожны с тем, какой "путь" вы используете, и держите его прямо, сообщаете ли вы вашему коду, где найти файл, или браузер, как для запроса того же файла.

Веб-сервер скрывает структуру файлов ОС от пользователя/браузера по многим причинам, причем безопасность является очень высокой. Например, URL-адреса относятся к серверу, а не к корню диска.

То, с чем вы столкнулись, очень распространено, и шансы действительно хороши тем, что каждый, кто работает с программированием в Интернете, имеет или будет работать в одном и том же случае, возможно, несколько раз.