2017-07-04 3 views
1

Ich arbeite an einem Rails-Projekt, auf dem ich ein Produktmodell mit einem Feld habe, um ein Bild hochzuladen. Ich benutze das Carrierwave-Juwel für die Uploads und das Projekt befindet sich auf einem Server, auf dem nginx läuft.CarrierWave :: Crop :: ProcessingError (konnte nicht beschneiden -: en ist kein gültiges Gebietsschema)

Ich muss die Bilder auf den Pfad public/uploads innerhalb des Projekts hochladen. In der Entwicklungsumgebung funktioniert alles einwandfrei, aber bei der Produktion stürzt die Seite ab, wenn ich ein Bild hochlade.

Ich habe bereits das Produktionsprotokoll auf dem Server mit dem Befehl tails /var/log/nginx/error.log überprüft, aber aus irgendeinem Grund zeigt es mich nur so weit vor den POST/PATCH Aktionen.

Das ist mein product Modell:

class Product < ApplicationRecord 
    mount_uploader :picture, PictureUploader 

end 

Das ist mein picture uploader Datei:

class PictureUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 

    process crop: [400, 400] 

    # Choose what kind of storage to use for this uploader: 
    storage :file 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    'uploads' 
    end 

    def extension_whitelist 
    %w(jpeg jpg png) 
    end 

    def content_type_whitelist 
    /image\// 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    def filename 
    "#{secure_token}.#{file.extension}" if original_filename.present? 
    end 

    protected 
    def secure_token 
    var = :"@#{mounted_as}_secure_token" 
    model.instance_variable_get(var) || model.instance_variable_set(var, SecureRandom.uuid) 
    end 

end 

Und das ist die nginx-Konfiguration, die ich für den Standort haben:

server { 
    listen 8081; 
    server_name 127.0.0.1; 

    # Tell Nginx and Passenger where your app's 'public' directory is 
    root /var/www/project/current/public; 

    # Turn on Passenger 
    passenger_enabled on; 
    passenger_ruby /home/deploy/.rbenv/versions/2.4.1/bin/ruby; 
} 

Vielen Dank im Voraus :)

EDIT

Ich war das falsche Protokoll suchen. das Produktionsprotokoll wurde auf /var/www/project/current/log

Dies ist der Fehler, die ich bekomme:

D, [2017-07-04T16:50:19.330282 #1341] DEBUG -- : [c7b9956c-786f-440c-bc38-e13718f3493e] (0.1ms) BEGIN 
D, [2017-07-04T16:50:19.331113 #1341] DEBUG -- : [c7b9956c-786f-440c-bc38-e13718f3493e] (0.2ms) ROLLBACK 
I, [2017-07-04T16:50:19.331277 #1341] INFO -- : [c7b9956c-786f-440c-bc38-e13718f3493e] Completed 500 Internal Server Error in 4ms (ActiveRecord: 0.7ms) 
F, [2017-07-04T16:50:19.331669 #1341] FATAL -- : [c7b9956c-786f-440c-bc38-e13718f3493e] 
F, [2017-07-04T16:50:19.331691 #1341] FATAL -- : [c7b9956c-786f-440c-bc38-e13718f3493e] CarrierWave::Crop::ProcessingError (Failed to crop - :en is not a valid locale): 
F, [2017-07-04T16:50:19.331704 #1341] FATAL -- : [c7b9956c-786f-440c-bc38-e13718f3493e] 
F, [2017-07-04T16:50:19.331716 #1341] FATAL -- : [c7b9956c-786f-440c-bc38-e13718f3493e] app/controllers/products_controller.rb:39:in `block in update' 
[c7b9956c-786f-440c-bc38-e13718f3493e] app/controllers/products_controller.rb:38:in `update' 

Anscheinend es ein Problem mit den locale-Dateien ist. Ich benutze auch das carrierwave-crop-on-fly Juwel, um das Bild zuzuschneiden, wenn es hochgeladen wird, was scheint, ein Teil des Fehlers zu sein.

Ich habe diese auf mi application.rb:

config.i18n.default_locale = :es 
config.i18n.available_locales = :es 
config.i18n.enforce_available_locales = true 

ich die Frage aktualisieren würde, wenn ich die Antwort

+0

Am Ende habe ich die en-Datei in Locale-Variablen und bekam den Fehler 'Übersetzung fehlt: en.errors.messages.mini_magick_processing_error'. Es stellte sich heraus, dass ich ImageMagick nicht auf dem Server hatte. Ich habe es gelöst, indem ich 'sudo apt-get install imagemagick' auf dem entfernten Server ausgeführt habe. Ich lasse die Frage für den Fall, dass jemand anderer so ahnungslos wie ich wäre: P – Kenneth

+0

Sie können den Text aus diesem Kommentar als Antwort auf Ihre eigene Frage hinzufügen, das ist erlaubt und Sie werden anderen helfen, die ein ähnliches Problem in der Zukunft haben .Ein anderer Punkt ist, deinen Titel mit der Fehlermeldung zu aktualisieren, die du erhältst: "CarrierWave :: Crop :: ProcessingError (konnte nicht beschneiden -: en ist kein gültiges Gebietsschema)", das wird den Leuten mehr helfen. –

Antwort

0

Nachdem die en.yml Datei hinzugefügt wurde gefunden und in dem Lokalisierungs enthielt, die nächster Fehler war: translation missing: en.errors.messages.mini_magick_processing_error.

Es stellte sich heraus, Imagemagick wurde nicht auf dem Server installiert.

Um es zu lösen, müssen Sie ausführen: sudo apt-get install imagemagick auf dem Remote-Server.

Kredit geht an kenneth für die Beantwortung der Frage selbst.

Verwandte Themen