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。为我工作。
我正在尝试 运行 我在 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。为我工作。