Ruby on Rails Bootsy + Cloudinary上传图片问题

7

我有一个运行在Heroku上的RoR项目。我使用了带有图像上传功能的Bootsy编辑器和Cloudinary。我已经设置好了上传程序、Cloudinary API密钥以及初始化程序(如果需要,我可以向您展示)。现在,当我尝试在Bootsy中上传图像时,它会创建数据库行,并在Cloudinary中创建图像。但是在Bootsy的js窗口中,<img>为空。

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

1) uploaders/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) 初始化器/bootsy.rb

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

3) models/article.rb

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

  mount_uploader :main_image, ArticleImageUploader
  mount_uploader :list_image, ArticleImageUploader

end

这是我在浏览器中看到的 从检查中得到的html代码

P.S 好吧,我真的不知道 - 我只是在公共存储库中重复了这个错误。 https://bitbucket.org/dekakisalove/bootsy_tes/ 我会尽快为这个问题添加赏金。


请添加任何错误消息和日志输出,否则我们无法诊断问题。 - Roman Kiselenko
@Зелёный 我已经展示了屏幕。没有错误信息,只有一个空的img。在Rails日志中 - 一切看起来都很好。在Cloudinary中创建了图像。在数据库行中也创建了。 - Legendary
如果您知道的话,还有一个Web浏览器控制台。 - Roman Kiselenko
@Зеленый,没有错误,控制台也是空的。 - Legendary
实现 bootsy 是这样的: #= require bootsy 然后在代码中加入以下内容: = f.bootsy_area :body, class: "form-control", rows: 5 所以,我这边没有进行任何 js 初始化表单的操作。 - Legendary
显示剩余2条评论
1个回答

2
这个问题是由于类Cloudinary::CarrierWave::Storage中的方法store!返回值不正确导致的。
为了解决这个问题,你可以使用多种变体,例如:
像这样在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

或者像这样在app/uploaders/image_uploader.rb

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

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

你好!我已经对这个宝石进行了重写,现在我将尝试检查你的解决方案,如果它完美地运行,我将再次添加赏金。 - Legendary
嘿,它运行良好,谢谢!但是它根本不接受尺寸 - 就像我可以选择中等或小号 - 并且它加载相同的图像。 - Legendary
@Legendary,我认为,如果你仔细查看 bootsy gem 的源代码,你会发现它可能从来没有正常工作过,例如: https://github.com/volmer/bootsy/blob/master/app/assets/javascripts/bootsy/modal.js#L27 但是各个版本的图像 URL 是通过 https://github.com/cloudinary/cloudinary_gem#try-it-right-away 中所解释的方式生成的。 - Vakiliy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接