2016-05-10 5 views
13

Ich arbeite an einem einfachen Projekt mit Paperclip, um Bilder hochzuladen. Alles hat gut funktioniert, bis ich S3 mit Paperclip zu integrieren versuchte. Beim Hochladen eines Benutzerbildes bekomme ich einen NoMethodError (undefined method 'match' for nil:NilClass): Fehler. Das passiert nur, wenn ich meine S3-Konfiguration aktiv habe - wenn ich die Datei hochgeladen habe, lade ich sie perfekt hoch.AWS S3-Integration ergibt undefinierte Methode `match '

Meine Konfiguration:

development.rb: 
.... 
.... 
    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
    :bucket => ENV['AWS_BUCKET_ID'], 
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
} 

My Model:

class User < ActiveRecord::Base 
     has_attached_file :image_file, default_url: "/myapp/images/:style/missing.png" 
     validates_attachment_file_name :image_file, matches: [/png\Z/, /jpeg\Z/, /tiff\Z/, /bmp\Z/, /jpg\Z/] 

gesamte Fehlerausgabe von der Konsole:

NoMethodError (undefined method `match' for nil:NilClass): 
    app/controllers/images_controller.rb:33:in `block in create' 
    app/controllers/images_controller.rb:32:in `create' 

Dinge, die ich versucht:

  • Ich habe die AWS-Schlüssel und den Bucket-Namen direkt in den Code als Umgebungsvariable eingefügt.

  • Wie oben erwähnt, habe ich die AWS-Konfiguration in meiner Umgebungsdatei auskommentiert und es schien perfekt zu funktionieren.

Es ist wahrscheinlich erwähnenswert, dass ich die fog Juwel früher installiert starten Konfiguration für Google Cloud Storage, entschied sich aber mit S3-Stick statt. Ich benutzte gem uninstall fog, um den Edelstein zu entfernen, aber es scheint, dass einige Abhängigkeiten zurückblieben.

+0

Ich habe das gleiche Problem. Hast du schon eine Lösung gefunden? – rguerrettaz

+1

Haben Sie versucht, hinzuzufügen: s3_region => 'us-east-1' (oder was auch immer die Region, in der Ihre s3 ist) Hier ist ein Link, der helfen kann: https://github.com/thoughtbot/paperclip/blob/95acf3b898bd782f4429d42fd2d8812505390328/lib /paperclip/storage/s3.rb#L96 – rguerrettaz

+1

Ja, ich habe festgestellt, dass, sobald ich meine AWS-Region hinzugefügt habe, es gut zu funktionieren scheint. Als Antwort darauf wird dies in den Dokumenten nicht wirklich ausführlich erklärt - und war noch verwirrender, da ich im Prinzip den eingefügten Code aus einem anderen Projekt kopierte, das einwandfrei funktioniert hatte. – PSCampbell

Antwort

26

hinzufügen :s3_region zu Ihrer Konfigurationskarte:

Z.B.

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
    :bucket => ENV['AWS_BUCKET_ID'], 
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    }, 
    :s3_region => ENV['AWS_REGION'] 
} 

Leider ist dies eine Funktion v5.0.0 (in der Betaversion). Und deshalb gibt es nichts in den Dokumenten. Jedoch gibt es a comment about it in the actual 5.0 code.

Auch gut zu beachten, dass der Schlüssel in Papertrail s3_permissions jetzt einen Zeichenfolgenwert erwartet (es verwendet, um Symbole zu akzeptieren).

:s3_permissions => 'public-read' 
+0

Nun, da v5 offiziell veröffentlicht wurde, wurde dies im Dokument [UPGRADING] (https://github.com/thoughtbot/paperclip/blob/4ef27eb84fe283f5dbe62fd99d7359822e79db28/UPGRADING#L10) dokumentiert. – Nick

+1

Für Informationen ist der Wert ': region' in Ihrem Datei-Durchgang.Beispiel: "EU (Frankfurt)" ist "eu-central-1" –

+0

AWS Regionen und Endpunkte http://docs.aws.amazon.com/general/latest/gr/rande.html – askrynnikov

3

Sie müssen die Region in Ihnen s3_credentials in einer Weise wie region: ENV["AWS_REGION"] angeben. Zum Aufräumen unbenutzter Edelsteine ​​können Sie bundle clean ausführen.

+0

Ich habe eine Region hinzugefügt und bekomme den gleichen Fehler. – rguerrettaz

+0

Haben Sie Ihre Anwendung nach dem Hinzufügen von ': s3_region' in' development.rb' neu gestartet? – simmer

Verwandte Themen