Invalidate cache in CarrierWave uploader?

Offen
#314 4 Kommentare 2 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@const-cloudinary arbeitet bereits daran.

Seit 17.11.2019.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Beschreibung

bug

Hi, I having strange issue that I found many people struggle with through out issues, but I havent found how to make it using carrierwave. My problem is that if I have cloudinary carrierwave uploader on field in model and currently that field is nil and I upload new image using just simple_form form submit - it appears in cloudinary dashboard and as actual field in model so I can see uploaded image on site. Issue occurs when I want to update existing image on model - after model.update_attributes call with say logo parameter from form submitted, I see new image occurs in dashboard and old one is gone, however, my model still having old image in its field, so that I see only old image on site.

For example, my model Comany is Neo4j one, and in it is only that:

class Company
  ...
  property :logo
  mount_uploader :logo, CompanyLogoUploader
  ...
end

CompanyLogoUploader:

class CompanyLogoUploader < CarrierWave::Uploader::Base
  include Cloudinary::CarrierWave

  process :convert => 'jpg'

  if Rails.env.development?
    process :tags => ['env.development']
  end

  version :large do
    process :resize_to_fit => [500, 500, :north]
  end

  version :medium do
    process :resize_to_fit => [140, 140, :north]
  end

  version :small do
    process :resize_to_fit => [80, 80, :north]
  end

  version :tiny do
    process :resize_to_fill => [20, 20, :north]
  end
end

Now, if I have company model without logo and upload new one, all is great and here what I see as logo:

[2] pry(main)> Company.find('f0cfdf56-0f72-4184-affb-b37ee5fe097e').logo
=> #<CompanyLogoUploader:0x0055971c014d58
 @file=
  #<Cloudinary::CarrierWave::CloudinaryFile:0x0055971c010e10
   @filename="spikbsjvpx9tkgi78c3w.jpg",
   @format="jpg",
   @identifier="spikbsjvpx9tkgi78c3w.jpg",
   @public_id="spikbsjvpx9tkgi78c3w",
   @resource_type="image",
   @storage_type=nil,
   @uploader=#<CompanyLogoUploader:0x0055971c014d58 ...>,
   @version=nil>,
 @model=
  #<Company uuid: f0cfdf56-0f72-4184-affb-b37ee5fe097e, active_deals_count: 1, company_size: , created_at: 2015-12-17T21:01:24+00:00, deals_count: 1, description: Online HR services: payroll, benefits, and everything else, fundraising_stage: , jobs_count: 1, logo: https://res-3.cloudinary.com/davsupw1h/image/upload/spikbsjvpx9tkgi78c3w.jpg, name: Gusto, negativity_percentage: 0.0, ratings_count: 105, recommendation_percentage: 0.9714285714285714, reviews_count: 35, score: 9.6, screenshot: https://res-2.cloudinary.com/davsupw1h/image/upload/v1451872564/c8ve6qbmu2sqkws3hi2b.jpg, slug: gusto, updated_at: 2018-07-30T12:11:10+00:00, url: http://gusto.com/, url_ref: false, votes_score: 0, wilson_score: 9.4>,
 @mounted_as=:logo,
 @original_filename="spikbsjvpx9tkgi78c3w.jpg",
 @public_id="spikbsjvpx9tkgi78c3w",
 @stored_public_id="spikbsjvpx9tkgi78c3w",
 @stored_version=nil>

[3] pry(main)> Company.find('f0cfdf56-0f72-4184-affb-b37ee5fe097e').logo.url(:medium)
=> "https://res3.cloudinary.com/davsupw1h/image/upload/c_fit,h_140,w_140/spikbsjvpx9tkgi78c3w.jpg"

It appears in dashboard with url: "https://res.cloudinary.com/davsupw1h/image/upload/v1532952671/spikbsjvpx9tkgi78c3w.jpg"

Now, If I'll change this image to smth else, here's updated debug:

[4] pry(main)> Company.find('f0cfdf56-0f72-4184-affb-b37ee5fe097e').logo
=> #<CompanyLogoUploader:0x0055971be73148
 @file=
  #<Cloudinary::CarrierWave::CloudinaryFile:0x0055971be6cdc0
   @filename="spikbsjvpx9tkgi78c3w.jpg",
   @format="jpg",
   @identifier="spikbsjvpx9tkgi78c3w.jpg",
   @public_id="spikbsjvpx9tkgi78c3w",
   @resource_type="image",
   @storage_type=nil,
   @uploader=#<CompanyLogoUploader:0x0055971be73148 ...>,
   @version=nil>,
 @model=
  #<Company uuid: f0cfdf56-0f72-4184-affb-b37ee5fe097e, active_deals_count: 1, company_size: , created_at: 2015-12-17T21:01:24+00:00, deals_count: 1, description: Online HR services: payroll, benefits, and everything else, fundraising_stage: , jobs_count: 1, logo: https://res-3.cloudinary.com/davsupw1h/image/upload/spikbsjvpx9tkgi78c3w.jpg, name: Gusto, negativity_percentage: 0.0, ratings_count: 105, recommendation_percentage: 0.9714285714285714, reviews_count: 35, score: 9.6, screenshot: https://res-2.cloudinary.com/davsupw1h/image/upload/v1451872564/c8ve6qbmu2sqkws3hi2b.jpg, slug: gusto, updated_at: 2018-07-30T12:17:41+00:00, url: http://gusto.com/, url_ref: false, votes_score: 0, wilson_score: 9.4>,
 @mounted_as=:logo,
 @original_filename="spikbsjvpx9tkgi78c3w.jpg",
 @public_id="spikbsjvpx9tkgi78c3w",
 @stored_public_id="spikbsjvpx9tkgi78c3w",
 @stored_version=nil>

[5] pry(main)> Company.find('f0cfdf56-0f72-4184-affb-b37ee5fe097e').logo.url(:medium)
=> "https://res-3.cloudinary.com/davsupw1h/image/upload/c_fit,h_140,w_140/spikbsjvpx9tkgi78c3w.jpg"

Whereas new image that got updated in dashboard has url "https://res.cloudinary.com/davsupw1h/image/upload/v1532953062/spikbsjvpx9tkgi78c3w.jpg" - version is changed.

So my question is next - should I pass version somehow in image uploader, and how/where?
If yes then why does carrierwave integration by default does not using version and rely on caching? Can I turn it off somehow, in uploader, in cloudinary initializer? Thanks.

Vorherrschende Sprache
Ruby
Sterne
420
Forks
282
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus cloudinary/cloudinary_gem

Alle Issues in cloudinary/cloudinary_gem

Ähnliche Issues

Weitere Issues zu Ruby

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.