2017-08-28 80 views
7

Mam projekt RoR, żyjący na Heroku. Mam buty (redaktor z funkcjami przesyłania zdjęć) i mam chmurę. Ive instalator uploader, cloud api klucze i inicjalizatory (może pokazać, jeśli to konieczne). Teraz, gdy próbuję przesłać obraz w booty - tworzy on wiersz bazy danych i tworzy obraz w chmurze. Ale w js okna z Bootsy, tam pusty <img>Ruby on rails bootsy + cloudinary upload image trouble

ruby '2.3.1' 
gem 'rails', '~> 5.1.1' 
gem 'bootsy' 
gem 'carrierwave' 
gem 'fog' 
gem 'cloudinary', '~> 1.8.1' 

1) przesyłające/Bootsy/image_uploader.rb

module Bootsy 
    class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 

    # storage Bootsy.storage 

    include Cloudinary::CarrierWave 

    def store_dir 
     "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :large do 
     process :eager => true 
     process resize_to_fit: [ 
        700, 700 
       ] 

    end 

    version :medium do 
     process :eager => true 
     process resize_to_fit: [ 
        300, 300 
       ] 
    end 

    version :small do 
     process :eager => true 
     process resize_to_fit: [ 
        150, 150 
       ] 
    end 

    version :thumb do 
     process :eager => true 
     process resize_to_fit: [ 
        150, 150 
       ] 
    end 


    def extension_white_list 
     %w(jpg jpeg gif png) 
    end 
    end 
end 

2) inicjalizatory/bootsy.rb

Bootsy.setup do |config| 
    config.image_versions_available = [:small, :medium, :large, :original] 
    config.storage = :fog 
end 

3) modele /article.rb

class Article < ApplicationRecord 
    include Bootsy::Container 
    mount_uploader :image, Bootsy::ImageUploader 

    mount_uploader :main_image, ArticleImageUploader 
    mount_uploader :list_image, ArticleImageUploader 

end 

This what I've in browser And html code from inspect

P.S Ok, naprawdę nie mam pojęcia - po prostu powtórzę ten błąd w publicznym repozytorium. https://bitbucket.org/dekakisalove/bootsy_tes/ Dodam nagrodę do tego pytania, gdy tylko będzie to możliwe.

+0

Proszę dodać komunikat o błędzie i dane wyjściowe logów, w przeciwnym razie nie będziemy w stanie zdiagnozować problemu. –

+0

@ Зелёный Pokazałem ekran. Brak komunikatów o błędach. Po prostu puste zdjęcie. W logu szyn - wszystko wygląda dobrze. W obrazach chmury są tworzone. W wierszu bazy danych są tworzone – Legendary

+0

Istnieje również konsola przeglądarki, jeśli wiesz. –

Odpowiedz

2

Ten problem wynika z nieprawidłowej wartości zwracanej metoda store! klasy Cloudinary::CarrierWave::Storage

Aby obejść ten problem, można użyć kilka wariantów, np

tak w config/initializers/cloudinary_store.rb

module CloudinaryStorage 
    def store!(file) 
    super || uploader.metadata 
    end 
end 

ActiveSupport.on_load :after_initialize do 
    Cloudinary::CarrierWave::Storage.prepend CloudinaryStorage 
end 

lub jak to w app/uploaders/image_uploader.rb

module Bootsy 
    class ImageUploader < CarrierWave::Uploader::Base 
    after :store, :reload_data 

    def reload_data(file) 
     model.reload 
    end 
    # etc.. 
+0

Witam! Napisałem ponownie ten klejnot, spróbuję teraz sprawdzić rozwiązanie i jeśli działa idealnie - dodam ponownie nagrodę – Legendary

+0

Hej, działa dobrze, dziękuję! Ale to nie akceptuje rozmiarów w ogóle - jak ja może wybierać średnie lub małe - i ładuje ten sam obraz – Legendary

+0

@Legendary, myślę, że jeśli przyjrzysz się kodowi źródłowemu biżuterii, zauważysz, że prawdopodobnie nigdy nie działała prawidłowo, na przykład: https: //github.com/volmer/bootsy/blob/master/app/assets/javascripts/bootsy/modal.js#L27 ale URL obrazu var ious wersje generowane jak wyjaśniono w https://github.com/cloudinary/cloudinary_gem#try-it-right-away – Vakiliy