Пользовательские миниатюры для типов файлов со Скрепкой

Мертвая блокировка является состоянием системы, в которой никакой единственный процесс/поток не способен к выполнению действия. Как упомянуто другими, мертвая блокировка обычно является результатом ситуации, где каждый процесс/поток хочет получить блокировку к ресурсу, который уже заблокирован другим (или даже то же) процесс/поток.

существуют различные методы, чтобы найти их и избежать их. Каждый думает очень трудно и/или пробует много вещей. Однако контакт с параллелизмом является известно трудным и большинство (если не все), люди не будут в состоянии полностью избежать проблем.

Некоторые более формальные методы могут быть полезными, если Вы серьезно относитесь к контакту с этими видами проблем. Самый практический метод, о котором я знаю, должен использовать процесс теоретический подход. Здесь Вы моделируете свою систему на некотором языке процесса (например, CCS, CSP, ACP, mCRL2, LOTOS) и используете доступные инструменты для (модель-) проверка на мертвые блокировки (и возможно некоторые другие свойства также). Примерами комплекта инструментальных средств для использования является ФРГ, mCRL2, CADP и Uppaal. Некоторые храбрые души могли бы даже доказать свою системную мертвую блокировку, бесплатную при помощи чисто символьных методов (доказательство теорем; ищите Owicki-Gries).

Однако эти формальные методы обычно требуют некоторого усилия (например, изучение основ теории процесса). Но я предполагаю, что это - просто последствие того, что эти проблемы трудны.

13
задан Chelsea 30 July 2009 в 20:33
поделиться

2 ответа

Я действительно реализовал ту же самую функцию. Скрепка генерирует эскизы для всех моих изображений и PDF-файлов, и я добавил собственные значки эскизов для файлов MS Word, Excel, HTML, TXT и т. Д.

Мое решение довольно простое. В моей модели Вложение (в вашем случае Актив ) я определил следующий метод:

def thumbnail_uri(style = :original)
  if style == :original || has_thumbnail?
    attachment.s3.interface.get_link(attachment.s3_bucket.to_s, attachment.path(style), EXPIRES_AFTER)
  else
    generic_icon_path style
  end
end

Он возвращает либо URL-адрес эскиза, хранящегося на S3, либо локальный путь к общий значок PNG, основанный на типе содержимого активов (обсуждается ниже). Метод has_thumbnail? определяет, была ли для этого ресурса сгенерирована миниатюра. Это то, что я добавил в свой собственный форк Paperclip, но вы можете заменить его в своей собственной логике (я не уверен в «стандартном» способе определения этого, возможно, сравнивая путь с вашим определенным «отсутствующим» путем или даже просто сравнивая тип содержимого со списком по умолчанию ["image / jpeg", "image / png"] и т. д.).

В любом случае, вот метод, который возвращается путь к общему значку, основанный как на стиле эскиза (в вашем случае: thumb и: large), так и на типе содержимого:

# Generates a path to the thumbnail image for the given content type 
# and image size.
#
# e.g. a :small thumbnail with a content type of text/html, the file name 
#      would have the filename icon.small.text.html.png
#
# If no such thumbnail can be found a generic one is returned
def generic_icon_path(style = image.default_style)
  url = "/images/attachments/icon.#{style.to_s}.#{attachment_content_type.sub('/', '.')}.png"
  if File.exists? "#{RAILS_ROOT}/public/#{url}"
    url
  else
    "/images/attachments/icon.#{style.to_s}.default.png"
  end
end

Затем, чтобы добавить новый эскиз, я просто добавляю файлы PNG в / images / attachments / с правильным соглашением об именах файлов. Мой стиль большого пальца называется: small, и я определил стили для Word, Excel и обычного текста, поэтому в настоящее время у меня есть:

icon.small.application.msword.png
icon.small.text.plain.png
icon.small.application.vnd.ms-excel.png
icon.small.application.vnd.openxmlformats-officedocument.spreadsheetml.sheet.png
icon.small.application.vnd.openxmlformats-officedocument.wordprocessingml.document.png

Если тип содержимого не поддерживается, отображается общий значок «поймать все». :

icon.small.default.png
17
ответ дан 1 December 2019 в 23:48
поделиться

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

has_attached_file: media, ...,: style => {....}

В этом руководстве вы найдете эскизов видео .

0
ответ дан 1 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: