需要实现#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">
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 作为缓存存储的主要内容,如果未能解决你的问题,请参考以下文章
如何安装WP Super Cache加速WordPress网站访问速度