Скрепка не создает стили, и исходное изображение отображается как сломанное

У меня возникла большая проблема. Я действительно пытался, но я не могу решить эту проблему самостоятельно, поэтому я надеюсь, что люди могут помочь мне здесь.

Прежде чем говорить о моей проблеме, я должен сказать, что использую Paperclip и IMGKit в моем проекте, но я думаю, что проблема в Paperclip.

Я создаю Rails Task, чтобы делать снимки с домашней страницы некоторых сайтов. Некоторое время назад все работало нормально, но теперь все глючит. Я импортирую свою настоящую базу данных из Heroku на локальный хост (без каких-либо изображений и миграции скрепки), запускаю миграцию, удаляю все старые файлы из «public/system» и снова запускаю свою задачу (чтобы сделать снимок всех веб-сайтов).

введите здесь описание изображения

Итак, теперь у меня есть:

  • Пути и исходные изображения генерируются, но когда я пытаюсь загрузить их в представлении, это просто отображается как неработающее изображение.
  • Скрепка не создает пути и преобразованные изображения :styles.
  • Сайты, на которых нет изображения, я правильно вижу изображение по умолчанию.
  • ImageMagick, кажется, работает, я пытаюсь преобразовать некоторые изображения и работает как шарм.

Давайте посмотрим на код. Предположим, что я запускаю задачу, которая будет выполнять эту задачу для всех сайтов в моей базе данных. В моей архитектуре сайты называются элементами.

Девелопмент.рб

#config/environments/development.rb

# "which convert" give me this path
Paperclip.options[:command_path] = "/usr/local/bin/" 

Товар.rb (модель)

Моя задача просто вызывает object.save для каждого сайта в БД, поэтому мой код начинается с before_save.

has_attached_file :image,
    :styles => { :small => "200x147#" }, 
    :convert_options => { :small => "-quality 75 -strip" },
    :default_url => '/images/:style/bitcoin-earth.jpg'

before_save :generate_data
def generate_data
    self.image = get_image(self.id, self.url_original)
end

# Take snapshot of the website
def get_image(filename, link)       
   kit = IMGKit.new(link.to_s, :quality => 100, :width => 1024, :height => 768)

   file  = Tempfile.new(["template_#{filename}", 'png'], 'tmp',
                     :encoding => 'ascii-8bit')
   
   file.write(kit.to_img(:png))
   file.flush
   return file
 end

Вид

<%= image_tag store.image.url %>

Gemfile

gem "paperclip"

Если я попытаюсь запустить rake paperclip:refresh:missing_styles, задача завершится очень быстро без каких-либо ошибок. Но если я попытаюсь запустить rake paperclip:refresh CLASS=Item, я получу:

Image Paperclip::Errors::NotIdentifiedByImageMagickError

И да, я уже искал его и не нашел решения для своего случая.


Небольшой совет?

Когда я проверяю элемент в своем проекте и пытаюсь увидеть источник изображения элемента, я вижу:

http://localhost:3000/public/system/items/images/000/000/216/original/template_21620140109-14507-1c0yszzpng?1389305824

введите здесь описание изображения

Но если я зайду в папку своего проекта, я просто увижу изображение под названием template_21620140109-21209-1yls03opng. Обратите внимание, что там не существует ?1389305824. См. изображение выше.

Ну, я думаю, это все. В чем может быть проблема? Мне очень нужно решить эту проблему, пожалуйста, помогите мне :/


[Отредактировано 10 января 2013 г.]

Item.rb (модель):

before_save :generate_data
def generate_data
    file = File.open(get_image(self.id, self.url_original))
    self.image = file
    file.close
end

def get_image(filename, link)
    kit = IMGKit.new(link.to_s, :quality => 100,
                                :width => 1024, :height => 768)

    file  = Tempfile.new(["template_#{filename}", '.png'], 'tmp',
                         :encoding => 'ascii-8bit')
    file.write(kit.to_img(:png))
    file.flush
    return file
end

Теперь у меня нет ошибок на консоли при получении изображений и сохранении в БД, но Paperclip по-прежнему не генерирует мои :styles. Когда я перехожу к log/development.log, я вижу эту ошибку, но я не знаю, что я могу сделать, чтобы решить:

Command :: file -b --mime 'tmp/template_24320140110-17577-80zj1c.png'
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/template_24320140110-17577-80zj1c20140110-17577-mqa2q3.png[0]'
[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError>

Я думаю, что мы становимся ближе, пожалуйста, продолжайте помогать мне :)


person Paladini    schedule 09.01.2014    source источник


Ответы (1)


Я думаю, что ваша проблема здесь:

template_21620140109-14507-1c0yszzpng?1389305824 #-> should have .png (not a valid image)

Изображение

Это может быть не проблема, но, возможно, вы могли бы упростить свой метод, чтобы исключить временный файл:

# Take snapshot of the website
def get_image(filename, link)       
   kit = IMGKit.new(link.to_s, :quality => 100, :width => 1024, :height => 768)
   file = kit.to_file("system/temp/template_#{filename}")
   return file
 end

Я думаю, проблема в том, что ImageMagick не передает «настоящий» файл, и, следовательно, вы получаете проблемы с нераспознанным изображением.

person Richard Peck    schedule 10.01.2014
comment
Эй, Рик, действительно спасибо за этот ответ! У меня возникла ошибка с вашим кодом, вы можете помочь мне, наконец, решить эту проблему? :) Строка self.image = get_image(self.id, self.url_original) выдает мне эту ошибку: closed stream. Я думаю, что self.image не может хранить то, что возвращает get_image, или что-то в этом роде. Хотите полный код ошибки? - person Paladini; 11.01.2014
comment
В log/development.rb нашел только одну ошибку: Command :: file -b --mime '/home/paladini/Documents/Projetos/bittle/btc-stores/tmp/template_22.png' - person Paladini; 11.01.2014
comment
Некоторые вещи изменились, я обновлю свой код и расскажу вам о новых проблемах. - person Paladini; 11.01.2014
comment
Привет, Фернандо - пожалуйста, дайте обновленную информацию - будет очень интересно узнать о вашем прогрессе :) - person Richard Peck; 11.01.2014
comment
Привет, Рич, я уже обновил свой код, вы можете видеть это под разделом «Отредактировано».... И спасибо за интерес! (: - person Paladini; 11.01.2014