Подтвердить что ты не робот

Default_url в скрепке скрепки с обновлением трубопровода

Я использую Paperclip и имею параметр default_url, подобный этому для одного из моих вложений:

:default_url => '/images/missing_:style.png'

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

4b9b3361

Ответ 1

:default_url => ActionController::Base.helpers.asset_path('missing_:style.png')

Затем поместите изображения по умолчанию в app/assets/images/

Ответ 2

Проверено только на Rails 4.

Чтобы заставить его работать на производстве, мы должны передать имя существующего файла помощнику asset_path. Таким образом, передача строки, содержащей местозаполнитель типа "missing_:style.png", не работает. Я использовал пользовательскую интерполяцию как обходной путь:

# config/initializers/paperclip.rb
Paperclip.interpolates(:placeholder) do |attachment, style|
  ActionController::Base.helpers.asset_path("missing_#{style}.png")
end

Обратите внимание, что вы должны не префикс пути с помощью images/, даже если ваше изображение находится в app/assets/images. Затем используйте его как:

# app/models/some_model.rb
has_attached_file(:thumbnail,
                  :default_url => ':placeholder',
                  :styles => { ... })

Теперь по умолчанию воспроизводятся URL-адреса с правильными хэшами для дайджеста.

Опция default_url также принимает лямбда, но я не мог найти способ определить запрошенный стиль, поскольку интерполяции применяются только к результату лямбда.

Ответ 3

Просто убедитесь, что в ваших представлениях все ваши скрепленные изображения отображаются с помощью image_tag.

<%= image_tag my_model.attachment.url(:icon) %>

Таким образом, все paperclip :crazy :symbol :interpolation произойдут с строкой url, прежде чем Rails попытается разрешить ее в актив в конвейере.

Кроме того, убедитесь, что ваш :default_url совместим с активами... if missing_icon.png находится в приложении/активах/изображениях/missing_icon.png, затем :default_url должен быть просто "missing_:style.png"

<%= image_tag my_model.attachment.url(:icon) %>
# resolves to...
<%= image_tag "missing_icon.png" %>
# which in development resolves to...
<img src="/assets/missing_icon.png">

Ответ 4

Я получил ошибку (даже для одного стиля) в активах: прекомпиляция с

:default_url => ActionController::Base.helpers.asset_path('missing.png')

Итак, я подключился к методу, подобному этому

# supposing this is for avatar in User model

has_attached_file :avatar,
   :styles => {..},    
   :default_url => lambda { |avatar| avatar.instance.set_default_url}

def set_default_url
  ActionController::Base.helpers.asset_path('missing.png')
end

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

Ответ 5

это работает для меня:

has_attached_file :avatar, :styles => { :small => "52x52",
:medium => "200x200>", :large=> "300x300", :thumb => "100x100>" },
                              :default_url => "missing_:style.png"

просто поместите изображения в папку ваших ресурсов/изображений с именем: missing_large.png, missing_medium.png, missing_small.png и missing_thumb.png

Ответ 6

В rails 4.0.0 и paperclip 4.1.1 это сработало для меня:

has_attached_file :avatar,
  styles: { medium: '300x300#', small: '100x100#', thumb: '25x25#' },
  default_url: ->(attachment) { 'avatar/:style.gif' },
  convert_options: { all: '-set colorspace sRGB -strip' }

Ответ 7

В итоге мне пришлось использовать что-то вроде следующего.

DEFAULT_URL = "#{Rails.configuration.action_controller.asset_host}#{Rails.configuration.assets.prefix}/:attachment/:style/missing.png"
has_attached_file :art, :styles => { :large => "398x398#", :medium => "200x200#", :small=>"100x100#", :smaller=>"50x50#", :smallest=>"25x25"}, :path=>"images/:attachment/:id/:style/:basename.:extension", :default_url => DEFAULT_URL

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

Ответ 8

В файле модели измените эту строку:

has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"

удалив это:

/images/

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

Работал для меня.

Ответ 9

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

Проблема из других решений, которые предполагают использование

:default_url => ActionController::Base.helpers.asset_path('missing_:style.png')

заключается в том, что вы получите сообщение об ошибке "missing_style.png" не прекомпилировано.

Я создал инициализатор со следующим кодом:

module Paperclip
  module AssetPipeline
    module Interpolator
      def self.interpolate(pattern, *args)
        ActionController::Base.helpers.asset_path Paperclip::Interpolations.interpolate(pattern, *args)
      end
    end
  end
end

Тогда в моей модели я бы сделал:

has_attached_file :image, interpolator: Paperclip::AssetPipeline::Interpolator, ...

Ответ 10

Просто удалите / из /images/pic.png: images/pic.png