7
votes

Options converties convertielles PaperClip

après Quelques recherches j'étais Capable d'ajouter des styles basés sur ma colonne image_class code>.

model.rb strong> p> xxx pré>

Ceci fonctionne en douceur, maintenant Je voulais ajouter du convert_option convert_option convert_option fort> aussi. Cela échoue en quelque sorte. P>

NoMethodError: undefined method `instance' for :all:Symbol

from /Users/AnsPoluke/Sites/nulike/app/models/movie_image.rb:8:in `block in <class:MovieImage>'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:431:in `[]'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:431:in `process_options'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:423:in `extra_options_for'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/style.rb:56:in `convert_options'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/style.rb:79:in `block in processor_options'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/style.rb:78:in `each'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/style.rb:78:in `processor_options'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:462:in `block in post_process_style'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:461:in `each'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:461:in `inject'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:461:in `post_process_style'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:454:in `block in post_process_styles'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:453:in `each'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:453:in `post_process_styles'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:445:in `block (2 levels) in post_process'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:393:in `_run__3861360263242897910__image_post_process__callbacks'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/callbacks.rb:36:in `run_paperclip_callbacks'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:443:in `block in post_process'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:383:in `_run__3861360263242897910__post_process__callbacks'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/callbacks.rb:36:in `run_paperclip_callbacks'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:442:in `post_process'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/attachment.rb:114:in `assign'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/paperclip-4.1.1/lib/paperclip/has_attached_file.rb:66:in `block in define_setter'
from (irb):2
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:90:in `start'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands/console.rb:9:in `start'
from /Users/AnsPoluke/.rvm/gems/ruby-2.1.0/gems/railties-4.0.2/lib/rails/commands.rb:62:in `<top (required)>'
from bin/rails:4:in `require'


3 commentaires

J'ai trouvé quelques solutions, mais ils ont effectivement signalé exactement la même erreur que vous le voyez!


Où les trouvez-vous? Et comment est-ce une solution lors de la lancée d'une erreur? :)


lol je ne voulais pas dire "solution", je voulais dire un autre q où quelqu'un a trouvé une erreur similaire et tenté de résoudre!


5 Réponses :


2
votes

Appliquez-le à tous depuis que c'est ce que vous faites de toute façon? XXX

Échec de la création d'un processeur de papier


2 commentaires

Merci! Les options de convertis exactes de la nouvelle couverture ne sont pas encore claires, alors je l'ai modifiée en amélioré car il diffère certainement de l'affiche


Qu'en est-il de mettre cela dans décider_styles : styles [: thumb] = ["30x45!" ,: jpg, {: convert_options => {: tout => "-Flop"}}] < / code> Je pense que vous pouvez définir convert_options dans un style individuel



9
votes

Remarque: je n'ai pas vérifié que sur le code de travail

Il semble que l'argument du bloc passé: convert_option est déjà une instance, pas la pièce jointe (par opposition à l'option Styles, où il s'agit d'une pièce jointe)

Essayez: p> xxx pré>

BTW Votre code sera bien meilleur si vous extrayez les données de configuration, par exemple: P>

IMAGE_OPTIONS = {
      poster: {
        styles: {
          thumb: {
            geometry: "30x45!",
            format: :jpg,
            convert_options: '-flop',
          },
          standard: {...}
          expanded: {...}
          big: {...}
        }
      },
      cover: {
        styles: {...}


3 commentaires

Je peux voir que l'exception sort de la console / IRB. Comment appelez-vous là-bas qui provoque l'exception?


Merci beaucoup! La dernière mise à jour a résolu le problème. Bounty bien mérité :)


Je pense que cela ne fonctionne plus :( L'instance a été remplacée par le symbole (: tous)



2
votes

La réponse approuvée ne fonctionne pas. Il peut être lu dans les commentaires et l'auteur reconnaît qu'il n'a pas été testé en code.

Ce code fait travail: xxx

L'approche correcte consiste à avoir convert_options à l'intérieur des styles lambda; L'avoir comme une lambda distincte ne fonctionne pas, du moins pour la version de papier 4.1 et la plus haute.

Pour garder ma réponse au même endroit, j'ai mis tout le code en ligne et omis tous les styles à côté de Thumb . Évidemment, pour mettre en œuvre cela, vous devez conserver la méthode décider_convert_options .


3 commentaires

Le code a fonctionné pour moi ... Qu'est-ce qui n'a pas fonctionné à la vôtre?


J'ai continué à obtenir nométhoderror: méthode non définie "instance" pour: TOUT: symbole jusqu'à ce que je l'ai changé sur le code ci-dessus.


Hmm étrange, je me rappelle que cela a fonctionné pour moi ... mais c'est génial d'avoir une autre solution!



1
votes

Ajouter le convert_options code> dans les styles code> eux-mêmes. Voici un exemple pour un modèle d'image de rails génériques contenant deux styles et des booléens correspondants pour activer ces styles.

# == Schema Information
#
# Table name: images
#
#  id                 :integer          not null, primary key
#  image_file_name    :string(255)
#  image_content_type :string(255)
#  image_file_size    :integer
#  hero_style         :boolean 
#  thumb_style        :boolean 
#  image_updated_at   :datetime
#  created_at         :datetime         not null
#  updated_at         :datetime         not null
#

class Image < ActiveRecord::Base

  # These are the postprocessing options. 
  # The boolean <stylename>_style? attributes controls which styles are created. 

  STYLES = {
    hero: {geometry: "2500x800#", convert_options: "-quality 75 -strip", source_file_options: ""},
    thumb: {geometry: "312x100#", convert_options: "-quality 75 -strip", source_file_options: ""}  
  }

  has_attached_file :image,
    styles: 
      lambda { |file|
        r = {}
        STYLES.keys.each do |stylename|
          r[stylename] = STYLES[stylename] if file.instance.method("%s_style?" % stylename).call
        end
        return r
      }

  validates_attachment :image, :presence => true,
  content_type: { content_type: ["image/jpeg", "image/png"] },
  file_name: {matches: [/png\Z/, /jpe?g\Z/]}



end


0 commentaires

1
votes

Vous pouvez également spécifier convert_options dans styles: xxx


1 commentaires

Merci. Cela a pris beaucoup trop de temps pour constater que cela est possible. Nous transcodons également la vidéo et l'application de convert_options vers le principal has_attached_file décède le transcodage vidéo. Cela fonctionne bien parce que nous pouvons appliquer le convert_options seulement sur les styles d'image. BTW, voici les documents qui indiquent que cette option est présente sur le style objet : rubydoc.info/github/Thoughtbot/paperclip/...