2016-08-05 11 views
2

Ich habe SO-Beiträge für die letzten anderthalb Tage durchforstet und eine andere Frage zu diesem Problem here gestellt und muss noch eine Lösung finden. Ich kann meine Bilder, die korrekt in AWS hochgeladen wurden, nicht mit der in der Dokumentation angegebenen Datei <%= image_tag @user.avatar.url(:medium) %> rendern.Kann Bilder in Sicht nicht wiedergeben (Büroklammer/AWS)

in meiner DB sucht, sind alle Felder auf den Avatar im Zusammenhang tatsächlich bevölkert mit:

avatar_file_name => meditation.jpg  
avatar_content_type => image/jpeg     
avatar_file_size => 109992 
avatar_updated_at => 2016-08-04 06:48:31.361434 

und das Bild kann in meinem amazon Eimer auf das Bild des Link im Browser durch Doppelklick eingesehen werden: Wie Sie sehen können, wird aus irgendeinem Grund eine doppelte Dateierweiterung angehängt, was ein separates Problem ist (an dem ich das Feedback begrüße), aber das scheint nicht das Problem zu sein, da ich nicht rendern kann in der Ansicht hochgeladen Bilder mit einer einzigen Dateierweiterung entweder.

Also mit den Bildern hochgeladen wird, die db Felder ausgefüllt werden, und keine Fehler - ich bin nicht sicher, warum ich sie nicht in der Ansicht rendern kann. Ich vermute, dass das Problem ist entweder 1) der Weg -die wie dies in meinem Modell sieht:

has_attached_file :avatar, 
:styles => { medium: "300x300#", thumb: "100x100#" }, 
:convert_options => { 
:thumb => "-quality 75 -strip" }, 
:s3_host_name => "s3.amazonaws.com", 
:path => ":rails_root/public/:attachment/:id/:style/:filename.:extension", 
:url => ":attachment/:id/:style/:filename.:extension", 
:default_url => "default_img.png", 
:storage => :s3, 
:s3_credentials => { 
    :bucket => 'giving-tree-images', 
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
}, 
:s3_permissions => { 
    :original => 'public-read' 
} 
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/ 

attr_accessor :avatar_file_name, :avatar_content_type, :avatar_file_size, :avatar_updated_at 

die, wie Sie richtig scheinen zu sehen zu sein (es sei denn ich die :rails_root Bit Entnahme in meinem Modell werden soll)

oder 2) Ich muss irgendwie die Position der Bilder in einem separaten Modell speichern (was ich andere Leute gesehen habe, aber ich bin nicht sicher, dass es erforderlich ist, wie andere dies nicht getan haben - gewährt sie können habe einfach nicht erwähnt, dass sie es getan haben). Dies ist ein Schritt in keiner der Dokumente, die ich gelesen habe.

3) Ich frage mich auch, ob es möglicherweise einen separaten Prozess gibt, den ich in der Entwicklung im Gegensatz zur Produktion machen muss?

oder 4) Ich benutze Schienen 4.2.3 und habe Kommentare gelesen, dass Büroklammer Versionen von aws> 2.00 nicht unterstützt - jedoch die Heroku docs - angewiesen, 2.3 zu verwenden ... also vielleicht ist das das Problem?

gem "paperclip", "~> 5.0.0" 
gem 'aws-sdk', '~> 2.3' 

Ich habe auch in den folgenden anderen Beiträgen, eine config/asw.yml-Datei, die wie folgt aussieht einrichten,:

development: 
    access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 
    secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %> 

production: 
    access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 
    secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %> 

obwohl ich nicht sicher bin, es gelesen wird (wo die ENV var ist in secrets.yml gespeichert ist, sowie sowohl lokal als auch auf Heroku über Klemme) und eine config/s3.yml-Datei, die wie folgt aussieht:

include 'secrets.yml' 

development: 
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %> 
bucket: <%= ENV["S3_BUCKET_NAME"]%> 

production: 
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %> 
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %> 
bucket: <%= ENV["S3_BUCKET_NAME"]%> 

einen initializers/s3.rb

if Rails.env == "production" 
# set credentials from ENV hash 
S3_CREDENTIALS = { :access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], :bucket => "giving-tree-images"} 
else 
# get credentials from YML file 
S3_CREDENTIALS = Rails.root.join("config/s3.yml") 
end 

und modifizierte meine beiden Umgebungen/development.rb und meine Umgebungen/production.rb enthalten:

config.paperclip_defaults = { 
    storage: :s3, 
    :s3_host_name => "s3.amazonaws.com", 
    s3_credentials: { 
    bucket: ENV.fetch('S3_BUCKET_NAME'), 
    access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), 
    secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), 
    s3_region: ENV.fetch('AWS_REGION'), 
    } 
} 

... nach mehreren anderen Beiträgen kombiniert vorgeschlagen. Es ist durchaus möglich, dass ich all das nicht benötige, also wenn jemand mir helfen kann, was ich loswerden sollte und warum ich keine Bilder in der Ansicht rendern kann - ich würde es WIRKLICH schätzen, da dies unerträglich ist.

+0

Haben Sie versucht, die nicht zu definieren: Pfad und: url und haben nur die Standard Pfad? Und sehen Sie, ob das für Sie funktioniert? – mrvncaragay

+0

danke für Ihre Antwort! Ich habe versucht, nur ': url' zu verwenden, dann einfach' 'path'' zu verwenden und dann beide wegzulassen, kein Glück – HolyMoly

Antwort

0

Sie setzen extension nach :filename für die :path und die :url - aber Sie sollten nicht.

:filename enthält die Erweiterung. Deshalb erhalten Sie die Erweiterung zweimal.

Sie haben dies in Ihrem Modell: :path => ":rails_root/public/:attachment/:id/:style/:filename.:extension", :url => ":attachment/:id/:style/:filename.:extension",

und nach .:extension entfernen, sollten Sie diese haben: :path => ":rails_root/public/:attachment/:id/:style/:filename", :url => ":attachment/:id/:style/:filename",

Verwandte Themen