需要实现#cache!如果你想使用 Cloudinary::CarrierWave::Storage 作为缓存存储

Posted

技术标签:

【中文标题】需要实现#cache!如果你想使用 Cloudinary::CarrierWave::Storage 作为缓存存储【英文标题】:Need to implement #cache! if you want to use Cloudinary::CarrierWave::Storage as a cache storage 【发布时间】:2019-11-08 07:28:34 【问题描述】:

我在尝试上传图片时收到此错误“需要实现#cache!如果您想使用 Cloudinary::CarrierWave::Storage 作为缓存存储。” 它在我的控制器中突出显示了这部分代码:

def update
  @company.update(company_params)
  redirect_to company_path(@company)
end

我正在使用 Carrierwave 将照片上传到 cloudinary。 我的配置中有一个 cloudinary.yml 文件,我的初始化程序中有一个 cloudinary.rb。

identitylogo_uploader.rb

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


  process :convert => 'png'
  process :tags => ['logo_entreprise']

  version :standard do
    process :resize_to_fill => [150, 150, :north]
  end

  version :thumbnail do
    resize_to_fit(50, 50)
  end


  def public_id
    "uploads/#model.class.to_s.underscore/#mounted_as/#model.id"
  end
end

公司.rb

class Company < ApplicationRecord
  mount_uploader :identitylogo, IdentitylogoUploader
end

companies_controller.erb

def update
  @company.update(company_params)
  redirect_to company_path(@company)
end

def company_params
  params.require(:company).permit(:identitylogo, :name, :industry, 
  :employees, :website)
end

_form.erb

<%= simple_form_for @company do |f| %>
  <%= f.input :name %>
  <%= f.input :industry %>
  <%= f.input :employees %>
  <%= f.input :website %>
  <%= f.input :identitylogo_cache, as: :hidden %>
  <%= f.input :identitylogo, label: false %>

  <%= f.button :submit %>
<% end %>

_show.html.erb

<img src="<%= @company.identitylogo %> " >

我注意到链接已生成,但文件未上传到 cloudinary。

【问题讨论】:

更新:我更改了IdentitylogoUploader,添加了这样的存储行:storage :file 错误消失,上传结束但图片没有上传到cloudinary!当我在浏览器中检查时,我看到了链接(因为云端没有图片,所以你无处可去),当我检查数据库时,我发现照片的值是这样的:identitylogo: "uploads/company/identitylogo/127.png"&gt; Cloudinary 也应该能够直接提供帮助 - 您可以在 support.cloudinary.com/hc 提出请求 @AyoubBenThabet 您是否有幸找到了解决方案?我遇到了类似的问题(但使用 Imagekit::Carrierwave 而不是 Cloudinary)。 在这里打开了一个问题github.com/imagekit-developer/imagekit-gem/issues/6 【参考方案1】:

好像最新版本的 CarrierWave 还不兼容 Cloudinary。

检查您的 Gemfile 和 Gemfile.lock。我必须删除 .rc 结尾并重新启动服务器。

【讨论】:

【参考方案2】:

config.cache_storage = :file添加到carrierwave初始化程序中,错误消失了。

CarrierWave.configure do |config|
 # For an application which utilizes multiple servers but does not need caches persisted across requests,
 # uncomment the line :file instead of the default :storage.  Otherwise, it will use the default storage as the temp cache store.
 config.cache_storage = :file
end

这是改变旧行为的提交:link

【讨论】:

以上是关于需要实现#cache!如果你想使用 Cloudinary::CarrierWave::Storage 作为缓存存储的主要内容,如果未能解决你的问题,请参考以下文章

PHP 标签cloudin'

如何安装WP Super Cache加速WordPress网站访问速度

Cache 工作原理,Cache 一致性,你想知道的都在这里

buffers与cached

springboot开启Cache缓存

oracle序列问题