Rails + Carrierwave + Ckeditor + Fog + S3 - 文件未指向亚马逊

Rails + Carrierwave + Ckeditor + Fog + S3 - files are not pointing to amazon

我正在尝试 运行 我在 S3 上的静态文件,一切正常。文件可用、呈现和上传没有任何问题。但是通过 ckeditor 推送到博客的所有内容都没有指向亚马逊主机,而是指向应用程序 url。

这是配置

config/initializers/fog.rb

CarrierWave.configure do |config|
  config.cache_dir = "#{Rails.root}/tmp/uploads" 

  config.storage = :fog

  config.fog_credentials = {
    provider:              'AWS',
    aws_access_key_id:     Rails.application.secrets.app_s3_username,
    aws_secret_access_key: Rails.application.secrets.app_s3_password,
    region:                Rails.application.secrets.app_s3_region
  }
  config.fog_directory  = Rails.application.secrets.app_s3_bucket
  config.fog_public     = false
  config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }
end

models/ckeditor/picture.rb

class Ckeditor::Picture < Ckeditor::Asset
  mount_uploader :data, CkeditorPictureUploader, :mount_on => :data_file_name

  def url_content
    url(:content)
  end

end

uploaders/ckeditor_picture_uploader.rb

# encoding: utf-8
class CkeditorPictureUploader < CarrierWave::Uploader::Base
  include Ckeditor::Backend::CarrierWave

  # Include RMagick or ImageScience support:
  # include CarrierWave::RMagick
  include CarrierWave::MiniMagick
  # include CarrierWave::ImageScience

  # Choose what kind of storage to use for this uploader:
  storage :fog
.
.
.

已安装的 gem

  * carrierwave (0.11.2)
  * ckeditor (4.1.6)
  * fog (1.37.0)

反正其他上传者的图片 url 是 https://bucket.s3-eu-west-1.amazonaws.com/uploads/... ckeditor 图片的 url http://example.com/uploads/...

任何建议和帮助将不胜感激,因为我尝试并搜索了互联网,但未能找到任何有类似问题的人。有人提到 public / 私人图片有问题,但这不是我的问题,因为 URL 不正确

您是否尝试重新启动 Rails 服务器?

尝试创建 config/initializers/carrierwave.rb 而不是 lib/carrierwave/storage/fog.rb https://github.com/carrierwaveuploader/carrierwave/tree/0.11-stable#configuring-carrierwave

只需几个简单的步骤即可解决问题:

首先你必须知道,ckeditor 将图像的 src 硬编码到数据库中,所以当 ckeditor carrierwave 被修改为从旧源指向 s3 时,旧链接被破坏并且必须通过转储 table

mysqldump -hhost -uuser -ppassword database table > table.dump

然后用 sed 或一些可以查找和替换的文本编辑器编辑它

nano table.dump + ctrl + w + r

然后搜索“/uploads/ 并替换为”https://bucket.amazonaws.com/uploads/

当然,前提是你像我一样保存了文件夹结构。

上传的第二个问题根本不是问题。我只是没有测试它,因为我首先查看现有图片。

P.S.: 只是为了确保即使在将来也能正常工作。我进行了配置 public,因此 src 链接没有存储所有可能过期的详细信息,并将存储桶策略编辑为

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*"
        }
    ]
}

尝试重置您的数据库。或者在将它们指向 fog/aws 之前删除存储 ckeditor 照片 url 的 table。为我工作。